假设我有一个定义在 0<= x<= pi, 0<=y, z<=2pi 上的函数。我编写了一个 matlab 代码来全局搜索最大点,步长为 0.01。我还恢复了函数值。代码是(当然函数比 x+y+z 更复杂。这只是一个例子。)
x=0;
y=0;
z=0;
i=1;
Maxdeviation= ComputeDeviationSum(0,0,0,mufT, mufD, mufC);
MaximizingArg= [x, y,z] ;
while x<= pi
y=0;
z=0;
while y<= 2*pi
z=0;
while z<=2 *pi
deviation= x+y+z; % Just an example. The function is more complex.
if deviation> Maxdeviation
MaximizingArg= [x, y,z];
Maxdeviation= deviation;
end
a(i,:)=[x, y,z, deviation];
z=z+0.01;
i=i+1;
end
y=y+0.01;
end
x=x+ 0.01;
end
我发现这真的很慢。在我删除了三行恢复值之后,即删除
i=1;
a(i,:)=[x, y,z, deviation];
i=i+1
这三行代码,速度就快了很多。(我在 20 秒后停止了执行,发现后者比前者多执行了 10 倍的迭代次数。)
我的问题是:为什么停止恢复值后,代码会快得多?如果我想为每个点恢复值,我该怎么做才能让代码更快?