a=[2 4 5 6 10 38 39 40 ];
aa=[a,a(end)]; %添加一个元素,与最后一个元素相同,方便程序处理
var='c';
flag=0;
for i=1:length(aa)-1
if aa(i+1)-aa(i)==1
if flag==0
startX=i;
flag=1;
end
endX=i+1;
else
if flag==1
eval([var,'=[',num2str(aa(startX:endX)),']']);
var=var+1;
flag=0;
end
end
end
matlab不建议过多的利用循环处理,多利用matlab自带的函数比较方便。下面给个参考程序吧:
%输入信号
inputA=[ 10,1,2,10,3,4,5,6,7,10,8,9];
inputB=[ 100,1,2,100,3,4,5,6,7,8,100,9];
%自动按最大长度补齐
len=max(length(inputA),length(inputB));
A=[inputA,zeros(len-length(inputA))];
B=[inputB,zeros(len-length(inputB))];
%寻找相等点
temp1=(A==B);
%寻找相等点与其左右两端是否连续
temp2=[temp1,0,0]+[0,temp1,0]+[0,0,temp1];
temp2=temp2(2:length(temp2)-1);
%去掉其中的0点干扰
temp3=temp1.*temp2;
%对连续的点置为1
temp3=(temp3>1);
%求得结果
result=A.*temp3;
%%%%%%%%---------------------------------%%%%%%%%
对于新需求稍微修改一下矩阵维度就可以了,新修改的程序如下:
%输入信号
inputA=[1,2,3,101,102,103,4,5,6,7,8,9,10,11,410,420,430,440,450,12,13];
inputB=[21,22,410,420,430,440,23,24,25,26,27,28,29,30,31,32,33,34,101,102,103,35];
%自动按最大长度补齐
len=max(length(inputA),length(inputB));
A=[inputA,zeros(len-length(inputA))];
B=[inputB,zeros(len-length(inputB))];
%构建用于比较得二维矩阵
%注意此处A每行保持不变,B每行循环右移
A=ones(len,1)*A;
tempB=zeros(len,len);
tempB(1,:)=B;
for i= 1:len-1
temp0=circshift(B,[0 i]);
tempB(i+1,:)=temp0;
end
%寻找相等点
temp1=(A==tempB);
%寻找相等点与其左右两端是否连续
temp2=[temp1,zeros(len,2)]+[zeros(len,1),temp1,zeros(len,1)]+[zeros(len,2),temp1];
temp2=temp2(:,2:length(temp2)-1);
%去掉其中的0点干扰
temp3=temp1.*temp2;
%对连续的点置为1
temp3=(temp3>1);
%求得结果
result=A.*temp3;
%--------------------------------%
最后说一下该结果没有清除掉运算中的0,按自己的需求自己修改解决吧。
btag=(diff(a)==1|diff(a)==-1); %找到连续元素
ind=find(diff(btag)~=0)+1; %确定位置
%储存结果
c=a(ind(1):ind(2));
d=a(ind(3):end);