Matlab 理解不断增长的向量

Posted

技术标签:

【中文标题】Matlab 理解不断增长的向量【英文标题】:Matlab understand growing vectors 【发布时间】:2015-04-15 16:12:38 【问题描述】:

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

【问题讨论】:

为什么不用cell数组,之后再转换成数组呢? @kkuilla 这将如何改变? 您不会遇到不断增长的数组的意外行为。您知道循环后单元格的大小,并且可以预先分配它。 元胞数组仍然是数组,它们只是对另一个对象的引用数组。 【参考方案1】:

是的,它确实有所作为。这是因为你的 if 语句:如果vel(1) = [1],循环只运行两次:如果0 >= 1 不为真,则永远不会生成vel(2)。这就是为什么您会收到“越界”错误。

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

【讨论】:

啊,天哪,愚蠢的错误...非常感谢您向我指出这一点 =)【参考方案2】:

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

这意味着,在vel=[0] 的情况下,在第一次迭代中v0,这与vel(1) 相同,所以会执行vel(k+1)=v 行。然后,在第二个循环中,vel(k) 是您之前添加的 vel(2)

但是,在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

这样,您只有在实际找到附加项时才移动到下一个值(是否要在 if 测试中使用 v 取决于您要执行的操作)。

【讨论】:

【参考方案3】:

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

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

当您有起始条件vel = [1] 时,条件v>= vel(k) 对于第一个循环为假,并且您没有输入增长数组的 if 语句。对于下一个循环,您尝试访问不存在的 vel(2)

【讨论】:

以上是关于Matlab 理解不断增长的向量的主要内容,如果未能解决你的问题,请参考以下文章

Matlab在线性代数中的应用:向量组的线性相关性

MATLAB可视化实战系列(二十四)-三维可视化如何利用圆锥图显示向量场?

二、词向量和语义

matlab 中向量和矩阵相乘时,维数不等怎么算

在函数中传递向量

知识点 | 全面理解支持向量机