for ii=1:5
a(ii) = (ii)^2;
end
a
说,我将循环索引的结束值从5改为4,给出的答案仍然是[1 4 9 16 25]
只有我'全部清除',才会给出[1 4 9 16]
这是正常的吗?
答案 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 all
。 documentation on the clear function描述了您用clear all
清除的内容,在大多数情况下,这不是您想要的。