xiaoshi509 发表于 2007-1-19 12:04

求助各位,关于复数排序的问题

A=[-0.99422
-0.49262 +    0.78952i
-0.49262 -    0.78952i
0.17653 +    0.83857i
0.17653 -    0.83857i
0.74378 +    0.47136i
0.74378 -    0.47136i
0.72608];

对列向量A进行排序,要求按实部的大小从大到小进行排序,
即排出的结果应该是这样的:
A=[0.74378 +    0.47136i
0.74378 -    0.47136i
0.72608
0.17653 +    0.83857i
0.17653 -    0.83857i
-0.49262 +    0.78952i
-0.49262 -    0.78952i
-0.99422];
因为要处理的数比较多,所以请求各位高手帮助我一下,在这里先行谢过!
我自己尝试编了一个程序,但出来的排序结果只有实部了,下边是我的程序,供大家参考:
=srot(real(A))%按实部大小从小到大排序
n=length(A);
i=1:n;
j=n:-1:1;
C(i,:)=B(j,:)   %从大到小排序

eight 发表于 2007-1-19 13:07

原帖由 xiaoshi509 于 2007-1-19 12:04 发表
A=[-0.99422
-0.49262 +    0.78952i
-0.49262 -    0.78952i
0.17653 +    0.83857i
0.17653 -    0.83857i
0.74378 +    0.47136i
0.74378 -    0.47136i
0.72608];

对列向量A进行排序,要求按实部 ...


= sort(real(A));
A(I(end:-1:1))

[ 本帖最后由 eight 于 2007-1-19 16:32 编辑 ]

lxq 发表于 2007-1-19 16:01

= sort(real(A));
A(flipud(I))%这个语句不是只把I上下掉转么?

eight 发表于 2007-1-19 16:04

原帖由 lxq 于 2007-1-19 16:01 发表
= sort(real(A));
A(flipud(I))%这个语句不是只把I上下掉转么?


唉,都是感冒惹的祸,呵呵,应该是A(I(end:-1:1))才对,再次糊涂了,谢谢lxq提醒

[ 本帖最后由 eight 于 2007-1-19 16:32 编辑 ]

lxq 发表于 2007-1-19 16:29

回复 #4 eight 的帖子

呵呵 注意身体呀!

这天是容易感冒,多喝点水.注意休息.

attacker 发表于 2007-1-20 08:55

我刚想问这个问题,大家也想到了,嘿嘿,看来以后要先看一遍帖子啊

attacker 发表于 2007-1-20 09:31

我想到一个问题,如果是两列距阵,在对第一列进行排序时,原来对应的第二列也跟着变化,该如何做?
比如;
A=
B=
c=
排序后C距阵变化为
[2   1
3   6
5   3
8   4]

attacker 发表于 2007-1-20 09:58

想了一下,看了HELP,原来是这样可以解决
如;
X=;
=sort(A1);%对A1排升序
Y=A2(I);%利用排序索引,对A2进行排列
Z=;%生成新距阵

eight 发表于 2007-1-20 10:33

原帖由 attacker 于 2007-1-20 09:58 发表
想了一下,看了HELP,原来是这样可以解决
如;
X=;
=sort(A1);%对A1排升序
Y=A2(I);%利用排序索引,对A2进行排列
Z=;%生成新距阵

这个更简单:

A=;
B=;
C=
sortrows(C)

xiaoshi509 发表于 2007-1-20 12:21

感谢大家的帮助,在弱问一个问题,如果将复数存成文本文件,
在matlab里如何调用它呀!谢谢,祝大家身体健康
1:@)

happy 发表于 2007-1-21 13:39

原帖由 xiaoshi509 于 2007-1-20 12:21 发表
感谢大家的帮助,在弱问一个问题,如果将复数存成文本文件,
在matlab里如何调用它呀!谢谢,祝大家身体健康
1:@)

可以作为两列实数分别存储或者读取
页: [1]
查看完整版本: 求助各位,关于复数排序的问题