【问题标题】:Comparison of complex numbers in MATLABMATLAB中复数的比较
【发布时间】:2014-10-14 22:43:51
【问题描述】:

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

max 的文档说明如下:

当 X 是复数时,最大值是使用幅度计算的 最大(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 更改为> 是否有任何特殊原因?

【问题讨论】:

  • “大于”和“小于”对于复数没有很好的定义,所以你可以期待任何结果。
  • @Joni 我知道它们的定义不明确。我是在 MATLAB 的范围内提出这个问题的,它选择对不同的函数有不同的解释。
  • 13 年前,MATLAB Central 对此进行了长时间的讨论。从那以后似乎没有太大变化。现在的答案是,如果你想比较复数,你必须明确说明你想用什么度量来表示大于或小于。
  • @craigim 感谢您的链接。这是一个长期存在的问题,我们不知道为什么会这样,这有点令人沮丧。
  • >(又名gt)和其他五个relop 关系运算符的行为在他们自己的文档中有详细说明。

标签: matlab


【解决方案1】:

这是来自

doc >

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

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

涉及比较运算符的绝大多数运算旨在处理实数。为 > 之类的基本操作添加特殊行为来处理复数将导致 90% 的不需要它的代码大受打击。特别是,没有标准的方法来比较复数。这取决于您的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2021-12-13
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多