JuliaDynamics/DynamicalSystems.jl

Support for Complex number equations?

Open

#181 创建于 2022年4月21日

在 GitHub 查看
 (3 评论) (0 反应) (0 负责人)Julia (928 star) (102 fork)batch import
documentationgood first issue

描述

The example is simple:

using DynamicalSystems

function route(dx, x, p, t)
    dx[1] =  1im * ( p[1] * x[1] - 2 * real(x[2]) * x[1] - 0.5) - 0.05 * x[1]
    dx[2] = -1im * (0.75 * abs(x[1])^2 + x[2]) - 0.0005* x[2]
end

ds = DiscreteDynamicalSystem(route, ComplexF64[0, 0], [1])

Was trying to define a Dynamical system. And:

ArgumentError: Cannot create a dual over scalar type ComplexF64. If the type behaves as a scalar, define ForwardDiff.can_dual(::Type{ComplexF64}) = true.

So I manually set

ForwardDiff.can_dual(::Type{ComplexF64}) = true

And run it again:

MethodError: no method matching Float64(::ForwardDiff.Dual{ForwardDiff.Tag{DynamicalSystemsBase.var"#5#11"{typeof(route), Vector{Int64}, Int64}, ComplexF64}, ComplexF64, 2})
Closest candidates are:
  (::Type{T})(::Real, ::RoundingMode) where T<:AbstractFloat at C:\Softwares\Julia\share\julia\base\rounding.jl:200
  (::Type{T})(::T) where T<:Number at C:\Softwares\Julia\share\julia\base\boot.jl:770 
  (::Type{T})(::VectorizationBase.Double{T}) where T<:Union{Float16, Float32, Float64, VectorizationBase.Vec{<:Any, <:Union{Float16, Float32, Float64}}, VectorizationBase.VecUnroll{var"#s35", var"#s34", var"#s33", V} where {var"#s35", var"#s34", var"#s33"<:Union{Float16, Float32, Float64}, V<:Union{Bool, Float16, Float32, Float64, Int16, Int32, Int64, Int8, UInt16, UInt32, UInt64, UInt8, SIMDTypes.Bit, VectorizationBase.AbstractSIMD{var"#s34", var"#s33"}}}} at 

If I remove the im in the equation and change ComplexF64 to Float64 then it works fine. So does this mean DynamicalSystem.jl doesn't support complex numbers?

Package versions

versions:

  [608a59af] ChaosTools v2.8.1
  [5732040d] DelayEmbeddings v2.1.0
  [61744808] DynamicalSystems v2.3.0
  [6e36e845] DynamicalSystemsBase v2.7.0
  [ed8fcbec] Entropies v1.1.2
  [639c3291] RecurrenceAnalysis v1.8.0

贡献者指南