【问题标题】:index out of bounds error because numel索引超出范围错误,因为 numel
【发布时间】:2013-02-14 19:49:49
【问题描述】:

它循环直到最后一次,然后我收到错误“尝试访问 EQ_NUM(8);索引超出范围,因为 数字(EQ_NUM)=7。”

N_NODE=8
N_PRE_DISP=2
DISP_NODE= [2 7]

EQ_NUM = 0;
for i = 1:N_PRE_DISP 
    NODE=DISP_NODE(i);
    EQ_NUM(NODE) = -i;
end

ROW = 0;
for i = 1:N_NODE
    if (EQ_NUM(i)==0)
        ROW = ROW+1;
        EQ_NUM(i)=ROW;
    end 
end 

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在这个循环中

    EQ_NUM = 0;
    for i = 1:N_PRE_DISP 
        NODE=DISP_NODE(i);
        EQ_NUM(NODE) = -i;
    end
    

    您使用 7 个元素创建 EQ_NUMNODE 取的最大值是DISP_NODE(1:2) 中的最大值,即7

    在这个循环中

    ROW = 0;
    for i = 1:N_NODE
        if (EQ_NUM(i)==0)
            ROW = ROW+1;
            EQ_NUM(i)=ROW;
        end 
    end 
    

    你循环了i=1:8并最终尝试执行EQ_NUM(8)==0

    你需要修复一些东西,但我不知道是什么。可能你认为 Matlab 数组的索引是从 0 开始的,其实不然,Matlab 数组的第一个索引是 1。

    【讨论】:

    • 如何创建 EQ_NUM 以拥有 8 个元素?
    • 冒着看起来无用的风险:您的问题的答案可以在介绍性文档的前几页中找到。比起在 SO 上提出一系列非常基本的问题,您最好花时间阅读。
    • 我修正了我的错误。 EQ_NUM = 零(1,N_NODE);对于 i = 1:N_PRE_DISP 节点=DISP_NODE(i); EQ_NUM(节点) = -i;结束行 = 0;对于 i = 1:N_NODE if (EQ_NUM(i)==0) ROW = ROW+1; EQ_NUM(i)=行;结束结束
    • 不清楚——我首先将 EQ_NUM 定义为我需要的大小的零数组。感谢您的帮助
    • 您成功的自我教育证明了我拒绝提供帮助,我感到满足的温暖光芒:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多