matlab - 每次改变循环索引时是否必须清除变量?

时间:2016-09-11 05:43:27

标签: matlab loops for-loop clear

for ii=1:5    
a(ii) = (ii)^2;
end
a

说,我将循环索引的结束值从5改为4,给出的答案仍然是[1 4 9 16 25]

只有我'全部清除',才会给出[1 4 9 16]

这是正常的吗?

2 个答案:

答案 0 :(得分:1)

是的,这很正常!

运行时:

for ii=1:5    
   a(ii) = (ii)^2;
end
a

正如您所期望的那样,它会为您提供:a = [1 4 9 16 25]。请注意,a的大小设置为1x5。

现在运行时:

for ii=1:4    
   a(ii) = (ii)^2;
end
a

您实际上正在替换a的1到4索引的先前值(具有相同的值),但您没有对a的第5个索引执行任何操作,因此它保持不变

运行以下内容(不清除变量)以便更好地理解:

for ii=1:4    
   a(ii) = (ii)^5;
end
a

这将为您提供:a = [1 32 243 1024 25]

我希望这能回答你的问题!

答案 1 :(得分:1)

您描述的行为是完全正常的。当您首先定义了一个包含5个元素的数组时,第二个for循环仅更改a数组的前4个元素。

但是,请注意,还有另一种方法可以避免您描述的问题。 MATLAB强烈建议使用vectorization来避免此类问题。

如果您将其编码为:

a=(1:5).^2 % define a
... % some operations
a=(1:4).^2 % redefine a

然后,您不仅不需要清除变量,还可以获得更整洁,更易于阅读的代码。请记住使用逐元素取幂.^,否则您将获得error

此外,请注意,不建议使用clear all命令。您应该clear从工作空间中删除所有变量,或者clear a仅清除a变量而不是clear alldocumentation on the clear function描述了您用clear all清除的内容,在大多数情况下,这不是您想要的。