2012-07-28 96 views
0

我最近开始学习MATLAB,并写了下面的脚本今天是我工作的一部分,看看我们如何能够生成一个向量:MATLAB - 矢量脚本

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

当我运行此脚本,我得到了我预计,即下面的载体:

x = 0 1 4 9 16 

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

x = 16 

这是什么原因?我如何才能在第二次运行脚本时获取最后一个向量输入作为输出,而不是整个向量?如果任何人都可以向我解释这一点,我将不胜感激。

+0

你试图产生什么载体? – Serg 2012-07-30 19:47:25

回答

3

你忘记初始化i
第一次执行后i为4并保持为4.
然后将x初始化为空向量,但因为i为4,所以循环只运行一次。

清理您的工作空间并在第一次执行前后检查它。

+0

太棒了!这很有道理。非常感谢! – Kristian 2012-07-28 21:46:09

2

它可能是一个简单的错字?

为I = I:N

,并应实际上意味着

for i = 1:n 

,因为我是(可能)未初始化在第一次运行,因此0,它工作得很好。 第二次,我仍然是n(= 4),并且只运行一次。另外,作为一个性能提示:在循环的每次迭代中,增加矢量的大小,更高效(更加matlaboid)的方式是先创建带有基值的矢量,例如

x = 1:n 

然后方通过

x = x^2 

在Matlab中的每个值,使用(上更高的维度或矩阵操作)向量的操作应在迭代循环的方法中将优先,因为它提供了MATLAB中的机会做优化的操作。这种方式通常更具可读性。

+1

未定义的变量将引发错误。这里的'我'(第一次运行)是指复数(内建函数)。并且冒号操作符':'期望实数,因此它需要'真实(1i)'这就是为什么您第一次得到零的原因 – Amro 2012-07-28 23:34:52

+0

Legionair:非常感谢您的输入!是的,这实际上是我的一个错字。我当然应该使用i = 1:n – Kristian 2012-07-28 23:48:15

+0

@Amro:谢谢,你当然是对的。自从我与matlab合作以来,这已经有一段时间了;-) – Legionair 2012-07-28 23:54:37

4

从一个新的工作区开始,i将只是complex number1i(如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

+0

非常感谢您的意见。欣赏它:) – Kristian 2012-07-28 23:49:23