Matlab的for循环

作者:

最近写了一些 Matlab 程序,想起以前想过的一个东西,记录一下。

Matlab 的 for 循环很有意思,比如下例:

i = 3;
for i = 1:i
    i=2*i
end

输出

i=2
i=4
i=6

也就是说 Matlab 的循环变量的循环路径是在进入到 for 语句的时候就决定了,它会确定起始点,步长和终点,以后每次循环都加上步长,直到到达终点为止。所以 for i = 1:numel(a)这种写法, numel(a)也只会被计算一次(而建立中间变量 t = numel(a);然后 for i = 1:t 的写法会降低效率),这和 C 语言有本质的区别。

注意下面两个的区别:

for i = 1:100000000
    i=1;
end

以及

for i = [1:100000000]
    i=1;
end

第一个的 1:100000000 并不会真的初始化成一个向量;而第二个会,导致内存不够无法执行。

补充:最新 2009a 版的 Matlab 遇到上面例子中的循环体内部改变循环变量的情况会给出提示,另外还有很多新功能,建议升级,虽然大了点,安装文件有 4G 多。

Q. E. D.

类似文章:
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来:
上次说起 遇到两个 Matlab 的效率问题 ,还剩下 save , load 没说。不过这个问题的结论挺简单的,就是在 save 的时候尽量指定使用-v6 选项。
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
本文结论: 不要过度担心 Matlab 的传值调用的效率问题。
以下对并行计算的个人理解受到较多质疑,删除之。
前一篇:
经济金融 » 股市, 赌场
牛人说的:股市和赌场有很多共同点,但他们有一点不一样,这一点使得股市不如赌场那样充满暴力。那就是 股市里没有特定的交易对手
这次去野外拓展,见到了一个比较好玩的划拳方式。与传统的石头剪刀布划拳一样,不过这里需要三轮: