Matlab 的 for 循环

作者: , 共 512 字 , 共阅读 0

最近写了一些 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, 并行计算
parfor适用于
编程 » Matlab, 并行计算
我们知道 Matlab 不支持多重 parfor 循环。下面代码会出错:
上次大规模使用 Matlab 还是本科的时候,当时还是 5.3 版,现在重新尝试它,已经是 7.8 ( R2009a ),而且 R2010b 版都已经发售。而这些版本引入的一个新玩意儿便是面向对象化编程( object-oriented programming , OOP )。
本文结论:不要过度担心 Matlab 的传值调用的效率问题。
没有人敢说 Matlab 的帮助文件不够详细和全面,但 Matlab 里面的确存在一些功能和函数,你很难找到它的帮助文档。下面列举一些,以后碰到其它的也会放到这里来:
编程 » Matlab
Matlab 在启动时会自动运行脚本startup.m。在这个脚本里可以自动修改当前目录,修改显示方式等等。比如
上次说起遇到两个 Matlab 的效率问题,还剩下 save , load 没说。不过这个问题的结论挺简单的,就是在 save 的时候尽量指定使用-v6 选项。
编程 » Matlab
第一步,which函数可用来获取 Matlab 函数的全路径(包含路径和文件名)。
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
编程 » Matlab
在写 Matlab 程序时,函数的命名方式让人头疼,很难保证刚写的一个函数名在很久以前被用过,成为隐藏的一颗炸弹。
前一篇:
经济金融 » 股市, 赌场
牛人说的:股市和赌场有很多共同点,但他们有一点不一样,这一点使得股市不如赌场那样充满暴力。那就是股市里没有特定的交易对手
这次去野外拓展,见到了一个比较好玩的划拳方式。与传统的石头剪刀布划拳一样,不过这里需要三轮: