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

标签 julia

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

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/

相关文章:

julia - 如何在 Julia 中将任何类型转换为字符串

julia - Julia 中是否有外部映射函数?

matrix - 如何将 not 运算符应用于 Julia 中的所有矩阵元素?

parallel-processing - 使用 @everywhere 在 julia 中传递共享数组

julia - 如何向 Julia 类型添加新字段?

julia - 如何在 Plots.jl 中为变化的直方图设置动画?

julia - 您如何*获得* Julia 中BLAS 操作的线程数?

sorting - Julia 中的高效部分排列排序

arrays - 有没有办法在 Julia 中旋转 3D 数组?

function - 从 Julia 中的函数中收集值