MATLAB中复数的比较

时间:2014-10-14 22:43:52

标签: matlab

我试图弄清楚MATLAB如何使用以下代码比较复数。我不确定这是否是预期的行为,或者我是否发现了一个错误。

max的文档说明如下:

  

当X很复杂时,使用幅度计算最大值       MAX(ABS(X))。在相等幅度元素的情况下,然后是相位       角度MAX(ANGLE(X))用于。

max的行为符合预期的文档。

>> a = complex(rand(3,1), rand(3,1))

a =

   0.8147 + 0.9134i
   0.9058 + 0.6324i
   0.1270 + 0.0975i

>> b = complex(imag(a), real(a))

b =

   0.9134 + 0.8147i
   0.6324 + 0.9058i
   0.0975 + 0.1270i

>> max(a, b)

ans =

   0.8147 + 0.9134i
   0.6324 + 0.9058i
   0.0975 + 0.1270i

>> a > b

ans =

     0
     1
     1

>> angle(a) > angle(b)

ans =

     1
     0
     0

>> abs(a) == abs(b)

ans =

     1
     1
     1

然而,当我尝试使用大于运算符">"时,matlab似乎只使用真实部分进行比较。

>> a = complex(rand(5,1), rand(5,1))

a =

   0.1576 + 0.1419i
   0.9706 + 0.4218i
   0.9572 + 0.9157i
   0.4854 + 0.7922i
   0.8003 + 0.9595i

>> b = complex(imag(a), real(a))

b =

   0.1419 + 0.1576i
   0.4218 + 0.9706i
   0.9157 + 0.9572i
   0.7922 + 0.4854i
   0.9595 + 0.8003i

>> max(a, b) == a

ans =

     0
     0
     0
     1
     1

>> a > b

ans =

     1
     1
     1
     0
     0

>> real(a) > real(b)

ans =

     1
     1
     1
     0
     0

此行为是否有任何特殊原因从max更改为>

1 个答案:

答案 0 :(得分:2)

这是来自

doc >
  

测试只比较数值数组的实部

碰巧>的实现只关注真实的部分。 Matlab团队的设计决策似乎是合法的。

涉及比较运算符的绝大多数操作都旨在使用实数。为>等基本操作添加特殊行为处理复杂的数字将导致90%的代码不需要它。特别是,没有标准的方法来比较复数。这取决于你的申请。