julia angle函数返回相同角度的不同值

use*_*579 3 julia

在使用函数角度时,我遇到了这个结果:

julia> angle(-1+im*0.0)
3.141592653589793

julia> angle(-1-im*0.0)
-3.141592653589793
Run Code Online (Sandbox Code Playgroud)

这不是错误的,但可能会引起不适,因为通常角度的评估是在区间内(-pi,pi].

Ste*_*ski 7

这是正确和有意的.您正在遇到所谓的"分支切割":多值函数必须在可返回的多个值之间进行选择的点.John D. Cook有一篇简短但很好的文章介绍了这个概念,并概述了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论证虚构部分符号的连续性.许多复杂函数在实线上具有类似的分支切割,具有不同的结果,这取决于其参数的零值虚部的符号.