MATLAB 有什么奇技淫巧?

关注者
4,343
被浏览
501,084
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

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. 是先列后行比先行后列快,这个

@道真

也说到过,我以前也分析过这个现象。

379910987.blog.163.com/

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,也具有类似的效果。

后面想到了再补充。