【问题标题】:Plot complex inequality in Julia在 Julia 中绘制复杂的不等式
【发布时间】:2021-10-27 21:04:17
【问题描述】:

我有数学表达式|z - (-1)| < 1,其中z 是Complexes 的元素,相当于以(x,y)=(-1,0) 为中心的半径为1 的圆。

  1. 如何绘制这个表达式,
  2. 保留其衍生的数学表达式的结构, 可能吗?
  3. 应该是一个区域。

到目前为止我尝试了什么:

using ImplicitEquations, Plots

f(a,b) = abs.(a+im*b - (-1))
plot(f<1)

我得到的错误:

ERROR: MethodError: no method matching isless(::typeof(f), ::Int64)
Closest candidates are:
  isless(::Union{StatsBase.PValue, StatsBase.TestStat}, ::Real) at /home/buddhilw/.julia/packages/StatsBase/PGTj8/src/statmodels.jl:514
  isless(::AbstractGray{T} where T, ::Real) at /home/buddhilw/.julia/packages/ColorTypes/6m8P7/src/operations.jl:31
  isless(::ForwardDiff.Dual{Tx, V, N} where {V, N}, ::Integer) where
Tx at /home/buddhilw/.julia/packages/ForwardDiff/UDrkY/src/dual.jl:144
  ...
Stacktrace:
 [1] <(x::Function, y::Int64)
   @ Base ./operators.jl:279
 [2] top-level scope
   @ REPL[62]:1

【问题讨论】:

    标签: julia implicit complex-numbers


    【解决方案1】:

    ImplicitEquations 的 documentation 并不多,但有一点很突出:您没有使用正确的运算符。该包依赖不寻常的运算符来表示具有 Julia 函数的数学表达式:≪ (\ll[tab])、≦ (\leqq[tab])、⩵ (\Equal[tab])、≶ (\lessgtr[tab]) 或≷ (\gtrless[tab]), ≧ (\geqq[tab]), ≫ (\leqq[tab])。

    所以修复看起来像:

    using ImplicitEquations, Plots
    
    f(a,b) = sqrt((a+1)^2 + b^2)
    plot(f ≪ 1)
    

    更新:

    f(a,b) = abs(a + im*b - (-1)) 导致方法歧义错误。 f(a, b) = hypot(a+1, b),这是 abs 调用的,也会导致错误。看起来问题是在hypot 中的某个时刻调用了OInterval(x::Ointerval),但调度无法在boot.jl 中的(::Type{T})(x::T) where T&lt;:Numberintervals.jl 中的OInterval(a) 之间进行选择。仅仅重新定义OInterval(a::Ointerval) = a 也不起作用,因为您遇到了另一个MethodErrordecompose(::OInterval),这是一种用于处理浮点数的方法。查看the comments in intervals.jl,调度似乎正在进行中。

    【讨论】:

    • f 产生Complex 号码时,您确定这有效吗?我试过你的代码,得到了ImplicitEquations.OInterval(::ImplicitEquations.OInterval) is ambiguous
    • 这个PR 将修复这个例子。 (方法有歧义,hypot 需要定义。要优雅地处理复数,还有更多工作要做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多