清洁矢量与循环

时间:2016-12-10 01:51:29

标签: matlab loops

我写了一个代码,找到第一个零,比较零前后的值,删除零和更小的数字。但我不明白为什么我会收到错误:

  

指数超出矩阵维度。

     

bereinigen错误(第9行)       C1 = L(A1 + 1);

L=[-300   100     0   200  -100   100 0 -300 ];

A3=find(L==0);
U=length(A3);
for x=1:U
    A1=A3(x);
    C1=L(A1+1);
    C2=L(A1-1);
    B1=sign(C1);
    B2=sign(C2);
    if B1==B2
        D1=min(C1,C2);
            if D1==C1
                L(A1+1)=[];
                E1=find(L==0);
                E1=E1(1);
                L(E1)=[];
            elseif D1==C2
                L(A1-1)=[];
                E1=find(L==0);
                E1=E1(1);
                L(E1)=[];
            end
    else
        return
    end
end

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以使用逻辑索引来标记删除的indeces,然后在循环后删除它们

L=[-300 100 0 200 -100 100 0 -300 ];
Inds = true(size(L));
A3=find(L==0);
U=length(A3);
for x=1:U
    A1=A3(x);
    C1=L(A1+1);
    C2=L(A1-1);
    B1=sign(C1);
    B2=sign(C2);
    if B1==B2
        D1=min(C1,C2);
        if D1==C1
            Inds(A1+1)=false;
            Inds(A1)=false;
        elseif D1==C2
            Inds(A1-1)=false;
            Inds(A1)=false;
        end
    else
        break
    end
end
L = L(Inds);

请注意L(A1+1)也可能产生越界错误。你应该尝试处理这种可能性。