MATLAB 程序的变量命名问题

题目已经告诉了读者老爷您这篇文章是和 MATLAB (以下昵称为M酱)有关的。我们先看一个程序:

clear;tic;
a=0;b=1;
for i=1:10000000
    a=a+b;
end
toc;

M 酱告诉我,她要用 0.061435 秒就干完了这件事。

我换了个活给她,尽管看起来差不多

clear;tic;
a=0;asin=1;
for i=1:10000000
    a=a+asin;
end
toc;

M酱跑过来说,她这次用了 5.069864 才干完了这件事。嗯?这是怎么回事?这次是什么事情这么花时间?我掀开了她的裙子看看她的胖次(profiler)上有没有什么线索,不过胖次上也什么都没写。

区别在哪呢?我调动了我高达⑨的智商,仔细推理后得出结论,卧槽原来这两个程序有一个变量名不同啊。再一看卧槽第二个程序居然某个变量名占用了函数名啊。M 酱这时露出了一脸虽然不大懂但是主人果然好厉害的表情。

嗯这篇文章有营养的部分到此就结束了,结论就是,变量占用函数名在 MATLAB 中是会降低执行效率的。如果你的程序没有我这样的上千万次循环自然关系不大,不过还是注意以下为好。

以下是一个小实验:

clear;tic;
a=0;
for i=1:10000000
    a=a+asin(1);
end
toc;

M酱表示这个程序只需要 0.141043 秒就能完成。看来每次执行的时候让她纠结这个到底是变量还是函数比让她算个 asin 函数还要让她苦恼呢。

还有一个:

clear;tic;
a=0;asin=1;
for i=1:10000000
    a=a+asin(1);
    a=a+1;
end
toc;

需要 11.022203 秒,比前面那个时间还要长一倍。也就是说循环间夹了其他不涉及到函数名变量的语句也是会进一步降低执行效率的。

在这里肏一下某位得了直肠癌的老不死他妈,刚才写了一个小时的文章忘了在发布的时候切到自动模式了,然后被 reset 搞没了(不知道到底是发布中的哪一部触发了,wordpress 的自动保存也只有最前面一段)。活该这为虎作伥的老不死肚子上开个口淌屎。

另外在大半夜把一个程序拟人化的我还真是有够可悲的啊……