我写了一个代码,找到第一个零,比较零前后的值,删除零和更小的数字。但我不明白为什么我会收到错误:
指数超出矩阵维度。
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
感谢您的帮助
答案 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)
也可能产生越界错误。你应该尝试处理这种可能性。