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

时间:2017-03-03 09:48:29

标签: julia

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

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

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

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

1 个答案:

答案 0 :(得分:7)

这是正确和有意的。你遇到了所谓的"branch cut":一个多值函数必须在它可以返回的多个值之间进行选择的点。 John D. Cook有一个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关于论证虚构部分符号的连续性。许多复杂函数在实线上具有类似的分支切割,具有不同的结果,具体取决于其参数的零值虚部的符号。