我想要增加一个列向量(不知道它到底会有多长时间)。
我有一个测试代码。然而,我对它的行为感到困惑。
初始化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
答案 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)
。