Matlab理解生长向量
我想增加一个列向量(不知道它到底需要多长时间)。 我有一个测试代码。然而,我对它的行为感到困惑。 初始化Matlab理解生长向量,matlab,vector,Matlab,Vector,我想增加一个列向量(不知道它到底需要多长时间)。 我有一个测试代码。然而,我对它的行为感到困惑。 初始化vel=[0]时,向量增长良好。当使用vel=[1]初始化时,它不会。我收到以下错误消息:“试图访问vel(2);索引超出范围,因为numel(vel)=1。” 为什么呢?向量的第一个元素是什么,应该没有区别,或者它是什么? 谢谢你把这个告诉我 找到下面的代码: vel=[0] k=1 v=0 for i=1:10; if v>= vel(k)
vel=[0]
时,向量增长良好。当使用vel=[1]
初始化时,它不会。我收到以下错误消息:“试图访问vel(2);索引超出范围,因为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
是的,这确实有区别。这是因为您的if语句:如果
vel(1)=[1]
,则循环只运行两次:vel(2)
,如果0>=1
不为真,则永远不会生成vel(2)
。这就是为什么会出现“越界”错误
此外,我建议在for循环中使用I。是的,它确实会有所不同。这是因为您的if语句:如果
vel(1)=[1]
,则循环只运行两次:vel(2)
,如果0>=1
不为真,则永远不会生成vel(2)
。这就是为什么会出现“越界”错误
此外,我建议在for循环中使用I。问题在于这一行:
如果v>=vel(k)
这意味着,在vel=[0]
的情况下,在第一次迭代中v
是0
,这与vel(1)
相同,因此执行vel(k+1)=v
行。然后,在第二个循环中,vel(k)
是前面添加的vel(2)
然而,在vel=[1]
的情况下,在第一次迭代中v
仍然是0
,这小于vel(1)
,因此vel(k+1)=v
行不会执行。这意味着,在第二个循环中,如果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
这样,只有在实际找到追加时,才能转到下一个值(是否要在if
test中执行v
,取决于您正试图执行的操作)。问题在于这一行:if v>=vel(k)
这意味着,在vel=[0]
的情况下,在第一次迭代中v
是0
,这与vel(1)
相同,因此执行vel(k+1)=v
行。然后,在第二个循环中,vel(k)
是前面添加的vel(2)
然而,在vel=[1]
的情况下,在第一次迭代中v
仍然是0
,这小于vel(1)
,因此vel(k+1)=v
行不会执行。这意味着,在第二个循环中,如果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
这样,只有在实际找到追加时才可以继续下一个值(是否要在if
中进行v
测试取决于您正试图执行的操作)。您无法访问超出范围的索引,但允许您创建它并扩展数组
value = 1;
value = arr(end+1); %Not allowed
arr(end+1) = value; %Allowed
当您有起始条件vel=[1]
时,第一个循环的条件v>=vel(k)
为false,并且您不需要在增加数组的位置输入if语句。对于下一个循环,您尝试访问不存在的vel(2)
。您不能访问超出边界的索引,但可以创建它并扩展数组
value = 1;
value = arr(end+1); %Not allowed
arr(end+1) = value; %Allowed
当您有起始条件vel=[1]
时,第一个循环的条件v>=vel(k)
为false,并且您不需要在增加数组的位置输入if语句。在下一个循环中,您尝试访问不存在的vel(2)
。为什么不使用数组,并在之后将其转换为数组?@kkuilla这将如何改变任何事情?您不会有不断增长的数组的不可预测的行为。你知道循环后单元格的大小,可以预先分配。单元格数组仍然是数组,它们只是指向另一个对象的引用数组。为什么不使用数组,然后将其转换为循环后的数组?@kkuilla这会改变什么?你不会有一个不断增长的数组的不可预测的行为。你知道循环后单元格的大小,可以预先分配。单元格数组仍然是数组,它们只是指向另一个对象的引用数组。啊,天哪,愚蠢的错误。。。非常感谢你向我指出这一点=)啊,天哪,愚蠢的错误。。。非常感谢您向我指出这一点=)