我最近开始学习 MatLab,今天写了以下脚本作为我练习的一部分,看看我们如何生成向量:
x = [];
n = 4;
for i = i:n
x = [x,i^2];
end
x
当我运行这个脚本时,我得到了我所期望的,即以下向量:
x = 0 1 4 9 16
但是,如果我之后第二次运行该脚本,我只会得到以下输出:
x = 16
这是什么原因?为什么我第二次运行脚本时只得到最后一个向量条目作为输出,而不是整个向量?如果有人可以向我解释这一点,我将不胜感激。
从一个新的工作区开始,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
你忘了初始化i。
第一次执行后i是 4 并且仍然是 4。
然后你初始化x为一个空向量但是因为i是 4 循环只运行一次。
清除您的工作区并在首次执行之前和之后对其进行检查。
这可能是一个简单的错字吗?
对于 i = i:n
实际上应该意味着
for i = 1:n
因为 i 在第一次运行时(可能)未初始化,因此为 0,所以它工作得很好。第二次,i 仍然是 n (=4),并且只运行一次。
此外,作为性能提示:在循环的每次迭代中,您都会增加向量的大小,更有效(和更多 matlaboid)的方法是首先使用基值创建向量,例如使用
x = 1:n
然后将每个值平方
x = x^2
在 Matlab 中,应该优先使用向量运算(或更高维度的矩阵运算)而不是迭代循环方法,因为它使 matlab 有机会进行优化操作。这种方式通常也更具可读性。