Matlab了解不断增长的载体

时间:2015-04-15 16:12:39

标签: matlab vector

我想要增加一个列向量(不知道它到底会有多长时间)。 我有一个测试代码。然而,我对它的行为感到困惑。 初始化vel=[0]时,向量变得很好。使用vel=[1]初始化时,它不会。我收到以下错误消息:" Attempted to access vel(2); index out of bounds because numel(vel)=1."

为什么?它不应该对我的载体的第一个元素是什么有影响,或者它是什么? 谢谢你把它告诉了我。

找到以下代码:

   vel=[0]
   k=1
   v=0 
 for i=1:10; 


        if v>= vel(k)
        vel(k+1)=v  %stores all v values, for plotting and analysis of v0 behaviour
        end
        %assignin('base','vel',vel)
        k=k+1
        v=v+1
 end

3 个答案:

答案 0 :(得分:2)

是的确有所作为。这是因为你的if句子:如果vel(1) = [1],循环只运行两次:如果vel(2)不为真,则永远不会生成0 >= 1。这就是为什么你得到一个"越界" -error。

此外,我建议在for循环中使用 i

答案 1 :(得分:2)

问题出在这一行:if v>= vel(k)

这意味着,如果vel=[0]在第一次迭代v上为0,则与vel(1)相同,那么vel(k+1)=v行已执行。然后,在第二个循环中,vel(k)vel(2),您之前已添加。{/ p>

但是,在vel=[1]的情况下,第一次迭代v仍为0,小于vel(1),因此vel(k+1)=v行没有被执行。这意味着,在第二个循环中,它尝试执行if v>= vel(2),但由于您在第二个循环期间没有附加到数组,因此索引不存在。

你应该这样做:

for i=1:10; 
    if v>= vel(k)
        vel(k+1)=v;
        %assignin('base','vel',vel)
        k=k+1;
        v=v+1:
    end
 end

这样,只有在实际找到附加内容时才会转到下一个值(无论您是否希望在v测试中if取决于您正在尝试做什么)。

答案 2 :(得分:1)

您无法访问超出范围的索引,但您可以创建它并扩展数组。

value = 1;
value = arr(end+1); %Not allowed
arr(end+1) = value; %Allowed

如果您具有起始条件vel = [1],则第一个循环的条件v>= vel(k)为false,并且您不会输入生成数组的if语句。对于下一个循环,您尝试访问不存在的vel(2)