急求MATLAB如何实现将2*n矩阵第一行相同元素合写成一个元素,同时第二行对应位置的元素相加?求高手帮忙!

例如A=0 1 1 2 2 2 3 3 4
0.1 0.1 0 0.2 0.1 0.1 0.1 0.2 0.1
要整理变换成:
B=0 1 2 3 4
0.1 0.1 0.4 0.3 0.1
我昨天的提问,今天怎么不见了,只好再次提问,恳求高手指点,谢谢!

A=[0,1,1,2,2,2,3,3,4;0.1,0.1,0,0.2,0.1,0.1,0.1,0.2,0.1];
C=sort(A(1,:)); %对A中第一排的元素进行升序排序赋值给C,因为你这里已经排了所以C就是A的第一行向量
[a b]=size(C); %获得向量C的大小,其中a为行数,b为列数
j=1;
D(j)=C(1); %D向量的第一个数就是C的第一个数
for i=2:b %从C的第二个数开始进行比较
if C(i)~=D(j) %此时的j是等于1的,因此D(j)就是C(1),用C(2)和C(1)比较,如果二者不同
j=j+1; %D的下标增加1
D(j)=C(i); %j现在为2,那么D(2)就等于C(2)
end %判断结束
end %i=2的循环结束,下一次执行i=3的循环,此时j=2,用D(2)和C(3)进行比较了,一次进行下去,知道比较完D(b)
[c d]=size(D); %上面已经获得了D,也就是从C中取出不相等的值各一个,再求D里面元素的个数
m=1; %向量E的下标,E中存储的就是你问题中的B的第二行的内容
E=zeros(1,d); %求出了D个数后,对应的下面的小数也应该有d个,因此产生一个1行×d列的全0初始向量
for k=1:d %循环次数为D中不同数的个数,也就是问题中B的第一行的个数,此处为循环5次,即从D中拿出d个不同的数进行比较
for n=1:b %每次从D中拿出一个数来,就要与A中的第一行的数进行比较
if D(k)==A(1,n) %如果D中拿出来的数与A中第一行的数相同
E(m)=E(m)+A(2,n); %如果上一步判断为是,也就是D中拿出的数与A中第一行的数相同,那么此时m=1,E(1)=0,然后将A中对应的第二行数与E(1)相加赋值给E(1)就完成了一次更新,n从1到b的过程中,如果有多次相同的,就多次进行更新,直到没有相同的数字
end %判断过程结束
end %这个end表示k=1的时候,已经将D(1)和A中第一行的n个数都比较完毕了,然后就是要将D(2)再和A中第一行的数比较了
m=m+1; %进行这一部之前,m=1,计算完后m=2,则下一个循环取的就是D(2)了。
end %全部计较完毕,E已经完成
B(1,:)=D;
B(2,:)=E;

上述就是全部过程代码,自己运行了下,没问题,是正确结果,因为加了第二行的排序代码,因此,第一步你输入A的时候可以不用进行排序,其他的都可以用这个代码实现。你算是幸福了,我当初自学matlab费多大事啊,都是自己查资料解决的,你也是一样,自学才能印象深刻。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-27
用MATLAB中的一个排序函数可以
详见MATLAB的帮助
相似回答