作业帮 > 综合 > 作业

matlab编程现有一维数组a=[1 3 4 5 6 7 9 11 12 15 16 17 19 20]通过编程实现找出

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/05 22:58:56
matlab编程
现有一维数组a=[1 3 4 5 6 7 9 11 12 15 16 17 19 20]
通过编程实现找出a中三个及三个以上的连续数字,并输出,即输出[3 4 5 6 7][15 16 17]
要求不用循环
新手,程序尽可能简单
a=[1 3 4 5 6 7 9 11 12 15 16 17 19 20];
b=(diff(a)==1);
ind1=find(diff([0 b])==1); %序列开始坐标
c=diff([0 b(end:-1:1)])==1;
ind2=find(c(end:-1:1))+1; %序列结束坐标
%输出
for ii=1:length(ind1)
if ind2(ii)-ind1(ii)>=2,disp(a(ind1(ii):1:ind2(ii)));end
end
再问: 你的程序非常好,不过我不知道采纳为满意还能不能追问,所以还没有点采纳,已经追加悬赏,麻烦你再费心…… 这个程序可移植吗?比如说我现在有一个非常庞大的数据,不过还是一维的,要求筛选180个以上的连续数据,需要修改以上程序的什么参数呢?帮我标记一下好吗?另外输出的数组能不能分别加上一个数组名呢?比如输出结果是m=[3,4,5,6,7]n=[15,16,17]以方便我继续调用
再答: 如果数组是多维的,例如data=[[ 2 3 4]; [5 10 11]; [1 3 7];] 你是要把它看做连续的一个数列,那么你只要 a=data(:); 那么a=[ 2 3 4 5 10 11 1 3 7], 就可以,这时候第一个输出序列为[ 2 3 4 5] 如果你每一行要分开单独看待,那么就要加入循环,每次只输入一行 第一个序列就只有[ 2 3 4 ],这样比较复杂一点 a=[1 3 4 5 6 7 9 11 12 15 16 17 19 20]; b=(diff(a)==1); ind1=find(diff([0 b])==1); %序列开始位置 c=diff([0 b(end:-1:1)])==1; ind2=find(c(end:-1:1))+1; %序列结束位置 mask=(ind2-ind1>=2);ind1=ind1(mask);ind2=ind2(mask);%删除长度2个一下的 %--------------------------------------------------------------------------------------------- %以上为获得数列起始位置 %以下为输出序列 num=length(ind1); m=cell(1,num); for ii=1:num m{ii}=a(ind1(ii):1:ind2(ii)); end 由于输出的数列长度不一样,这里设置m为cell类型来储存输出序列 使用时用m{1}返回第一个序列,m{2}返回第二个序列。