MATLAB 中复数的比较

Pav*_*ili 5 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
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用大于运算符“>”时,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
Run Code Online (Sandbox Code Playgroud)

行为以这种方式从 变为 是否有任何特殊max原因>

ben*_*der 3

这是来自

doc >
Run Code Online (Sandbox Code Playgroud)

该测试仅比较数值数组的实部

碰巧 > 的实现只查看实部。Matlab 团队的设计决定似乎是合法的。

涉及比较运算符的绝大多数运算都是针对实数的。为基本操作(例如 > 处理复数)添加特殊行为将导致 90% 不需要它的代码受到严重影响。特别是,没有比较复数的标准方法。这取决于您的应用程序。