关于matlab的问题!我把其中一个end位置换了为什么结果就不一样了

a=Rod_Temp_Gradient;
b=a;
count=0;
while (max(b)-min(b))>0.5
for k=2:(length(a)-1)
b(1)=(a(1)+a(2))/2;
b(length(a))=(a(length(a))+a(length(a)-1))/2;
b(k)=(a(k+1)+a(k-1))/2;
end
a=b;
k=1:length(a);
plot(k,b)
ylim([min(Rod_Temp_Gradient) max(Rod_Temp_Gradient)])
pause(0.000001)
count=count+1;
end
fprintf('count=%f\n',count)
这个运行出来的是正确的
a=Rod_Temp_Gradient;
b=a;
count=0;
while (max(b)-min(b))>0.5
for k=2:(length(a)-1)
b(1)=(a(1)+a(2))/2;
b(length(a))=(a(length(a))+a(length(a)-1))/2;
b(k)=(a(k+1)+a(k-1))/2;

a=b;
k=1:length(a);
plot(k,b)
ylim([min(Rod_Temp_Gradient) max(Rod_Temp_Gradient)])
pause(0.000001)
count=count+1;
end
end
fprintf('count=%f\n',count)
如果我把刚才a=b上面的end移到下面去 结果就变了 真的弄不懂为什么 感觉二者差不多的呀!

每次for循环结束于end上一行的指令
源程序:计算出所有b的元素,然后整个b赋值给a,这时a是一个矢量
end下移一行后就是每计算出一个b元素就赋值给a,后计算出来的覆盖前一个,以至于a到最后是一个标量,或者成为1*1的矢量

这应该就是区别所在
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-02
。。。什么差不多啊,end位置决定循环的适用范围的。。。追问

我看过了 只要我把正确指令里的end 移动到a=b的下面那一行, 算出的count 就完全不对 这是为什么

追答

for k=2:(length(a)-1)
b(1)=(a(1)+a(2))/2;
b(length(a))=(a(length(a))+a(length(a)-1))/2;
b(k)=(a(k+1)+a(k-1))/2;
end
a=b;
你自己的这个循环,如果把end放下面,那么整个ab 的赋值都乱了。。。肯定不一样了啊

相似回答