作业帮 > 数学 > 作业

求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/28 21:28:24
求教高手!怎样用MATLAB求解一维矩阵中连续出现元素的个数
我想知道怎样用MATLAB求解矩阵中连续出现数的个数比如我给你一个矩阵
A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ]
求解A中6连续出现的次数,并把这个出现次数放在B矩阵中
得到的B=[0 2 0 0 2 0 0 3 0 0 0 0 0 1 0 1 0 4 0 0 0]
本人急用,哪位高手帮帮忙啊!
不好意思是我没说清楚:这问题要求解有两个方面
1:要找出矩阵中出现次数最多的那个数a
2:要得到这个数在矩阵中连续出现的次数,且把次数放在B矩阵中
在举一个例子
C=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1]
那么得到的B=[1 0 3 0 0 0 0 0 0 5 0 0 0 0 0 0 1 0 3 0 0 ]
B矩阵中得数代表a连续出现的次数,0代表其他数
这个功能是麻烦点,不过不难,我写了一个m函数,实现这个目标:
function r=hello(a)
if isvector(a))
error('a is not a vector');
r=[];
end
con=[];
num=[];
for n=1:length(a)
b=find(con==a(n));
if isempty(b)
con=[con,a(n)];
num=[num,1];
else
num(b)=num(b)+1;
end
end
[m,k]=max(num)
big=a(k)
flag=0;
last=[];
for n=length(a):-1:2
if (a(n)~=big)&(a(n-1)==big)
last(n)=0;flag=0;
elseif (a(n)~=big)&(a(n-1)~=big)
last(n)=0;flag=0;
elseif (a(n)==big)&(a(n-1)==big)
last(n)=0;flag=flag+1;
elseif (a(n)==big)&(a(n-1)~=big)
last(n)=flag+1;flag=0;
end
end
if a(1)==big
last(1)=flag+1;
else
last(1)=flag;
end
r=last;
%结束----------
%运行:
>> A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ];
>> r=hello(A);
>> A=[1 6 6 2 6 6 8 6 6 6 2 5 3 6 1 6 5 6 6 6 6 ];
>> r=hello(A)
r =
Columns 1 through 11
0 2 0 0 2 0 0 3 0 0 0
Columns 12 through 21
0 0 1 0 1 0 4 0 0 0
>> C=[1 2 1 1 1 2 3 5 4 1 1 1 1 1 8 9 1 5 1 1 1];
>> r=hello(C)
r =
Columns 1 through 11
1 0 3 0 0 0 0 0 0 5 0
Columns 12 through 21
0 0 0 0 0 1 0 3 0 0
>> %结果就是你想要的.函数过程可以不看,直接写成m文件用就行了,我写了一两个小时呢,晕