wusemm 发表于 2010-10-16 12:18

实数复数混合数据排序问题

我通过解方程,得到这样一个根矩阵
r
r =
1.0e+004 *
Columns 1 through 6
      0 + 0.0836i   0.0000 + 0.0907i   0.0000 + 0.1038i   0.0000 + 0.1170i   0.0000 + 0.1293i-0.0000 + 0.1408i
      0 - 0.0836i   0.0000 - 0.0907i   0.0000 - 0.1038i   0.0000 - 0.1170i   0.0000 - 0.1293i-0.0000 - 0.1408i
   0.0002             0.0353             0.0615             0.0819            -0.0987            -0.1133         
-0.0002            -0.0353            -0.0615            -0.0819             0.0987             0.1133         
      0 + 0.0002i   0.0028             0.0069             0.0107             0.0144             0.0181         
      0 - 0.0002i-0.0028            -0.0069            -0.0107            -0.0144            -0.0181         
Columns 7 through 12
-0.0000 + 0.1515i-0.0000 + 0.1615i-0.0000 + 0.1710i-0.0000 + 0.1801i-0.1692            -0.1783         
-0.0000 - 0.1515i-0.0000 - 0.1615i-0.0000 - 0.1710i-0.0000 - 0.1801i   0.0000 + 0.1886i-0.0000 + 0.1969i
-0.1264            -0.1383            -0.1493            -0.1595             0.0000 - 0.1886i-0.0000 - 0.1969i
   0.1264             0.1383             0.1493             0.1595             0.1692             0.1783         
   0.0218             0.0255             0.0292             0.0328             0.0365             0.0401         
-0.0218            -0.0255            -0.0292            -0.0328            -0.0365            -0.0401   

这是3对共轭根
我需要把大于0实根全部放在一行,小于0实根放在一行,对应大于0复根放一行,小于0复根放一行,请问可以如何实现。
我的算法
for num=1:6;
    for cnt=1:12
      tf(num,cnt)=isreal(r(num,cnt));
      if((tf(num,cnt) ==0) &&(real(r(num,cnt))>0));
          rs(1,cnt)=r(num,cnt);
         elseif((tf(num,cnt) ==0) &&(real(r(num,cnt))<0));
          rs(2,cnt)=r(num,cnt);
         elseif((tf(num,cnt)==1) &&(real(r(num,cnt))>0));
          rs(3,cnt)=r(num,cnt);
         elseif(( tf(num,cnt)==1) &&(real(r(num,cnt))>0));
          rs(4,cnt)=r(num,cnt);
      elseif(( tf(num,cnt)==1) &&(real(r(num,cnt))<0));
          rs(5,cnt)=r(num,cnt);      
      else(( tf(num,cnt)==1) &&(real(r(num,cnt))<0));      
         rs(6,cnt)=r(num,cnt);
   
      end
    end
end
这里面的问题,有两个实根,if没办法区分出怎么放,要怎么再判断一下,把较大的实根放一起?

wusemm 发表于 2010-10-16 22:33

不知道哪位可以指点一下,盼

re-us 发表于 2010-10-17 09:41

比如想要>0的实根:
ix=real(r)>0;
a=r(ix)
就是逻辑运算

happy 发表于 2010-10-17 16:54

大于0实根:x(find(real(x)>0));
小于0实根:x(find(real(x)<0));
大于0虚根:x(find(imag(x)>0));
小于0虚根:x(find(imag(x)<0));

qibbxxt 发表于 2010-10-17 18:11

回复 happy 的帖子

恩,是不是此处的find可以去掉呢?

happy 发表于 2010-10-17 18:35

本帖最后由 happy 于 2010-10-17 18:42 编辑

qibbxxt 发表于 2010-10-17 18:11 static/image/common/back.gif
回复 happy 的帖子

恩,是不是此处的可以去掉呢?
效果是一样的,个人习惯问题

另外,如果没有记错的话,matlab版本比较老的话是要加这个find的。
老版本应该没有你说的这个功能

qibbxxt 发表于 2010-10-17 20:02

回复 happy 的帖子

恩,是的,从效率的角度考虑,去掉是要快一些的
但是从直观的角度考虑,去掉不好理解,这是一对矛盾

ChaChing 发表于 2010-10-17 23:35

本帖最后由 ChaChing 于 2010-10-18 08:54 编辑

happy应该没我年长, 但的确是个人习惯问题, 因我也习惯如此用!:lol
但还是谢谢qibbxxt提醒:handshake

有时直观与效率两者间的选择, 的确是一门艺术!

wusemm 发表于 2010-10-18 08:56

谢谢各位网友的提示,对于>0,和<0都好判断,关键〉0的有2个根,如何把较大的根放一起,把较小的实g根放一起

qibbxxt 发表于 2010-10-18 09:00

回复 wusemm 的帖子

判断大小的话,可以用sort排序,也可用max,min等

风花雪月 发表于 2010-10-18 09:11

wusemm 发表于 2010-10-18 08:56 static/image/common/back.gif
谢谢各位网友的提示,对于>0,和

不知道你所谓的大小评判标准是什么?
页: [1]
查看完整版本: 实数复数混合数据排序问题