在使用函数角度时,我遇到了这个结果:
julia> angle(-1+im*0.0)
3.141592653589793
julia> angle(-1-im*0.0)
-3.141592653589793
这并没有错,但可能会引起不适,因为
通常角度的评估在区间 (-pi,pi]
.
最佳答案
这是正确和故意的。您遇到了所谓的 "branch cut" :多值函数必须在它可能返回的多个值之间进行选择。约翰 D. 库克有一个 short but good article介绍概念并概述 Common Lisp 如何解决为各种相关功能一致地定义各种分支切割的问题。
在 angle
的情况下函数应用于复平面中的点-1,理论上任何奇数倍的π都是正确答案。角度值被归一化为在 [-π, π] 范围内,然而,它只留下 π 的两个奇数倍数可供选择:±π。哪一个应该在复平面中返回-1?从某种意义上说,问题是“你是从哪个方向接近真正的线的?”如果您在复平面上从上方接近 -1,则 π 是尊重连续性的答案,因为略高于实线的值的角度接近 π。但是,如果您从下方接近 -1,则 -π 是连续答案,因为在实线下方的角度接近 -π。因此,当我们评估 angle
在 -1 附近,虚部的符号很重要——即使它的值为零(±0.0
)——所以我们对 -1 ± 0.0im
给出不同的答案:
-
angle(-1 + 0.0im) == +3.141592653589793
-
angle(-1 - 0.0im) == -3.141592653589793
这些答案尊重 angle
的连续性关于论证虚部的符号。许多复函数在实线上具有相似的分支切割,其结果取决于其参数的零值虚部的符号。
关于julia 角度函数返回相同角度的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575552/