0

我最近开始学习 MatLab,今天写了以下脚本作为我练习的一部分,看看我们如何生成向量:

x = [];
n = 4;
for i = i:n
    x = [x,i^2];
end
x

当我运行这个脚本时,我得到了我所期望的,即以下向量:

x = 0 1 4 9 16

但是,如果我之后第二次运行该脚本,我只会得到以下输出:

x = 16

这是什么原因?为什么我第二次运行脚本时只得到最后一个向量条目作为输出,而不是整个向量?如果有人可以向我解释这一点,我将不胜感激。

4

3 回答 3

4

从一个新的工作区开始,i将只是复数 1i(如x^2=-1)。我想你在第一次运行时收到了这个警告:

Warning: Colon operands must be real scalars. 

所以 for 语句基本上循环了for i = real(1i):4。请注意real(1i)=0.

当您再次使用已经初始化的变量重新运行脚本时(假设您没有clear工作区),i将引用一个包含 的最后一个值的变量4,隐藏i具有相同名称的内置函数,并执行 for 循环:

x=[];
for i=4:4
    x = [x, i^2]
end

它只迭代一次,因此你最终得到x=16

于 2012-07-28T23:32:56.517 回答
3

你忘了初始化i
第一次执行后i是 4 并且仍然是 4。
然后你初始化x为一个空向量但是因为i是 4 循环只运行一次。

清除您的工作区并在首次执行之前和之后对其进行检查。

于 2012-07-28T21:38:08.030 回答
2

这可能是一个简单的错字吗?

对于 i = i:n

实际上应该意味着

for i = 1:n

因为 i 在第一次运行时(可能)未初始化,因此为 0,所以它工作得很好。第二次,i 仍然是 n (=4),并且只运行一次。

此外,作为性能提示:在循环的每次迭代中,您都会增加向量的大小,更有效(和更多 matlaboid)的方法是首先使用基值创建向量,例如使用

x = 1:n

然后将每个值平方

x = x^2

在 Matlab 中,应该优先使用向量运算(或更高维度的矩阵运算)而不是迭代循环方法,因为它使 matlab 有机会进行优化操作。这种方式通常也更具可读性。

于 2012-07-28T22:07:56.383 回答