我试图弄清楚 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
原因>
?
这是来自
doc >
Run Code Online (Sandbox Code Playgroud)
该测试仅比较数值数组的实部
碰巧 > 的实现只查看实部。Matlab 团队的设计决定似乎是合法的。
涉及比较运算符的绝大多数运算都是针对实数的。为基本操作(例如 > 处理复数)添加特殊行为将导致 90% 不需要它的代码受到严重影响。特别是,没有比较复数的标准方法。这取决于您的应用程序。
归档时间: |
|
查看次数: |
3015 次 |
最近记录: |