MATLAB 有什么奇技淫巧?
0. 能用矩阵操作的就不要用循环
不然你以为MATLAB这个名字是白叫的?
1. 快速交换矩阵的两个行和列
先声明这里说快速是指代码方便书写,实际执行效率上到底快不快,我并没有做测试。
一般的我们交换两个变量的值总需要引入一个临时变量,例如交换a,b的值,一般的高级语言中常见的做法如下:
temp=a;a=b;b=temp;
看下面这个语句:
A([1;3],:)=A([3;1],:)
可以实现矩阵中1,3行之间的互换,不需要中间变量,更不需要循环。稍作修改,两列之间的互换也行,MATLAB在矩阵操作方面确实可圈可点。这个是我在看matlab官方的m文件的时候发现的,似乎是magic.m文件,大家可以用 type magic命令翻翻看。
textbooks scarcely mention this little tricky.
2. 尽量使用左除,而不是inv函数。
这个是根据Moler(对,就是MATLAB的主要发明者)先生的建议(可参考其著作《Numerical Computing With MATLAB》,中译版是机械工业出版社的《MATLAB数值计算》),尽量使用左除,而不是inv函数,理由嘛,可能是具有更好的数值稳定性吧,不过具体是什么,你自己去问他吧。
3. 是先列后行比先行后列快,这个
@道真也说到过,我以前也分析过这个现象。
http:// 379910987.blog.163.com/ blog/static/335237972011716105629630/4. 有两种不同的求余方式
这个不算技巧吧,但是应该知道的(回字有四种写法哦)
mod的结果是和除数的符号保持一致的,而rem则是和被除数保持一致。rem(x,y)和mod(x,y)都返回返回x - n*y,但是前者计算n的时候用的是n = fix(x/y),而后者的计算n用的是n = floor(x/y)。
5. 快速输入之前命令的小技巧
我们知道在Command Window中按↑可以重复刚才的命令,不过有些人可能不知道,这个位置还支持搜索,假设我们一次输入了三个命令,aaa=3; b=aaa^3; clc;然后我在Command Window中输入a,然后按↑按键,aaa=3就出来了。这个在Matlab 2015及之后的版本中肯定是支持的,较早的版本我没有测试。另外,我在Win10中测试了一下cmd,也具有类似的效果。
后面想到了再补充。