在 Julia 中绘制复杂的不等式
Plot complex inequality in Julia
我有数学表达式 |z - (-1)| < 1
,其中包含 Complexes 的 z
个元素,它相当于以 (x,y)=(-1,0)
.
为中心的半径为 1 的圆
- 如何绘制这个表达式,
- 尽可能多地保留其派生的数学表达式的结构
可能吗?
- 应该是一个区域
到目前为止我尝试了什么:
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
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<:Number
或 OInterval(a)
之间进行选择=19=]。只是重新定义 OInterval(a::Ointerval) = a
也不会起作用,因为你 运行 变成了另一个 MethodError
for decompose(::OInterval)
,这是一种用于处理浮点数的方法。查看 the comments in intervals.jl
,调度似乎正在进行中。
我有数学表达式 |z - (-1)| < 1
,其中包含 Complexes 的 z
个元素,它相当于以 (x,y)=(-1,0)
.
- 如何绘制这个表达式,
- 尽可能多地保留其派生的数学表达式的结构 可能吗?
- 应该是一个区域
到目前为止我尝试了什么:
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
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<:Number
或 OInterval(a)
之间进行选择=19=]。只是重新定义 OInterval(a::Ointerval) = a
也不会起作用,因为你 运行 变成了另一个 MethodError
for decompose(::OInterval)
,这是一种用于处理浮点数的方法。查看 the comments in intervals.jl
,调度似乎正在进行中。