我认为每个人都会同意,MATLAB语言并不美观,也不特别一致。但没关系!我们仍然必须使用它来完成任务。
您有哪些使事情变得更容易的技巧?让我们每个回答提供一个技巧,以便人们可以投票支持他们。此外,请尝试用示例说明您的答案。
使用内置分析器查看代码中的热点部分:
profile on
% some lines of code
profile off
profile viewer
或者只需使用内置的tic
和toc
来快速获取时间:
tic;
% some lines of code
toc;
使用逻辑数组直接提取满足特定条件的矩阵元素:
x = rand(1,50) .* 100;
xpart = x( x > 20 & x < 35);
现在xpart只包含那些落在指定范围内的x元素。
在帮助文档中添加“SEE ALSO”行,可以快速访问其他函数的文档。首先,您必须在所有大写字母作为第一条注释行中包含函数名称。执行通常的注释头部处理,然后使用逗号分隔的其他相关函数列表来放置“SEE ALSO”。
function y = transmog(x)
%TRANSMOG Transmogrifies a matrix X using reverse orthogonal eigenvectors
%
% Usage:
% y = transmog(x)
%
% SEE ALSO
% UNTRANSMOG, TRANSMOG2
当您在命令行中键入“help transmog”时,您将看到此注释头中的所有注释,并带有其他列出功能的注释标题的超链接。使用单个冒号将矩阵转换为向量。
x = rand(4,4);
x(:)
myElems = [1:10 21:30 31:40...181:190]; y = x(myElems);
- Scottie Tsub2ind
可以帮助。 - Tobias Kienzler向量化循环。有很多方法可以实现,寻找代码中的循环并思考如何将其向量化是一件有趣的事情。使用向量操作可以让性能惊人地提高!
匿名函数有几个原因:
quad
和fminbnd
这样需要将函数作为参数传递的函数非常有用。在脚本中(不带函数头的.m文件)也很方便,因为与真正的函数不同,您无法包含子函数。.
% quick functions
f = @(x) 3*x.^2 + 2*x + 7;
t = (0:0.001:1);
plot(t,f(t),t,f(2*t),t,f(3*t));
% closures (linfunc below is a function that returns a function,
% and the outer functions arguments are held for the lifetime
% of the returned function.
linfunc = @(m,b) @(x) m*x+b;
C2F = linfunc(9/5, 32);
F2C = linfunc(5/9, -32*5/9);
图表中公式的 LaTeX 模式:在最近的一个版本(R2006?)中,您可以在函数调用末尾添加额外参数,'Interpreter','latex'
以使用 LaTeX 渲染。以下是一个示例:
t=(0:0.001:1);
plot(t,sin(2*pi*[t ; t+0.25]));
xlabel('t');
ylabel('$\hat{y}_k=sin 2\pi (t+{k \over 4})$','Interpreter','latex');
legend({'$\hat{y}_0$','$\hat{y}_1$'},'Interpreter','latex');
我不确定什么时候添加的,但它可以在text()、title()、xlabel()、ylabel()、zlabel()甚至是legend()函数中使用。只需确保你使用的语法不会产生歧义(因此在legend()中需要将字符串指定为单元数组)。
plot(t,sin(2*pi*[t; t+0.25]));
- Ricardo Altamirano使用xlim和ylim绘制垂直和水平线,示例:
在y=10处绘制一条水平线:
line(xlim, [10 10])
在x=5处绘制一条垂直线:
line([5 5], ylim)
drawnow
将强制更新它们。 - Memming以下是一个快速示例:
我发现逗号分隔列表语法非常有用,可以用于构建函数调用:
% Build a list of args, like so:
args = {'a', 1, 'b', 2};
% Then expand this into arguments:
output = func(args{:})
[one two three four] = {1 2 3 4}{:}
- Griffin