如何纠正“下标索引必须是真正的正整数或逻辑”。在我的代码中的Matlab?

时间:2011-03-05 21:30:41

标签: matlab

我是Matlab的新手。我用i到m做了一个for循环,j到n。我写了这段代码来获取矩阵的子矩阵,但它一直给我这个错误

下标索引必须是实数正整数或逻辑。 这是代码

for i=1:m,
for j = 1:n,
    display(i);
    display(j);

            edgeil = 2;
    edgeib = 2; 
    edgejb = 2; 
    edgejl = 2;


    if((i-CenteriSE)< 0)
       edgeib = CenteriSE - (-1)*(i-CenteriSE);

    end
    if((i+ CenteriSE)> m)
        temp = i+ CenteriSE - m;
        edgeil = CenteriSE - temp;
    end

    if((j-CenterjSE)< 0)
        edgejb = CenterjSE- (-1)*(j-CenterjSE);

    end
    if((j+ CenterjSE)> n)
        temp2 = j+ CenterjSE - n;
        edgejl = CenterjSE - temp2;
    end

    bok1 = round(edgeib);
    bok2 = round(edgeil);
    bok3 = round(edgejb);
    bok4 = round(edgejl);
    display(bok1);
    display(bok2);
    if( (bok1 == round(bok1)) && (bok2 == round(bok2)) && (bok3 == round(bok3)) && (bok4 == round(bok4)))
    B = circles(i-round(bok1):i+round(bok2),j-round(bok3):j+round(bok4));
    end

我写了如果声明和回合来纠正它但它不起作用。请帮帮我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,这很简单。首先让我们删除所有的混乱。你说CenteriSE = 2,所以这句话

edgeib = CenteriSE - (-1)*(i-CenteriSE);相当于edgeib=i的{​​{1}}。

现在,如果您转到上一个语句i=1,那么您正在执行B = circles(i-round(bok1):i+round(bok2),j-round(bok3):j+round(bok4));i-round(bok1)只有i-i=0。 Matlab的索引从1开始,这就是你得到这个错误的原因。