JuliaDiff / TaylorSeries.jl

Taylor polynomial expansions in one and several independent variables.
Other
351 stars 52 forks source link

MultivariatePolynomial interface #132

Open dpsanders opened 6 years ago

dpsanders commented 6 years ago

A general interface for multivariate polynomials is being developed:

https://github.com/JuliaAlgebra/MultivariatePolynomials.jl

TaylorSeries.jl should probably implement this interface, and in particular be a subtype of the corresponding abstract type.

Related to #130

lbenet commented 6 years ago

A-priori I am in favor; what do we need to do?

mforets commented 5 years ago

Related to https://github.com/JuliaIntervals/TaylorModels.jl/issues/19.

baggepinnen commented 1 year ago

I tried converting a TaylorN{Float64} to a DynamicPolynomial.Polynomial by calling the TaylorN object as a function, but this resulted in a stack overflow. Is there a way to perform such conversion?

julia> dx[3]
 1.9620000000000002 xu₂ + 1.0 xu₅ - 1.7004000000000001 xu₂³ - 0.2 xu₂² xu₅ + 0.1 xu₂ xu₄² + 0.73248 xu₂⁵ + 0.10666666666666667 xu₂⁴ xu₅ - 0.036666666666666674 xu₂³ xu₄² + 𝒪(‖x‖⁶)

julia> typetree(dx[3])
   TaylorN{Float64} <: 
   AbstractSeries{Float64} <: 
   Number <: 
Any

julia> dx[3]
 1.9620000000000002 xu₂ + 1.0 xu₅ - 1.7004000000000001 xu₂³ - 0.2 xu₂² xu₅ + 0.1 xu₂ xu₄² + 0.73248 xu₂⁵ + 0.10666666666666667 xu₂⁴ xu₅ - 0.036666666666666674 xu₂³ xu₄² + 𝒪(‖x‖⁶)

julia> typeof(dx[3])
TaylorN{Float64}

julia> @polyvar x[1:4] u[1:1];

julia> xu = [x; u]
5-element Vector{PolyVar{true}}:
 x₁
 x₂
 x₃
 x₄
 u₁

julia> dx[3](xu)
ERROR: StackOverflowError:
Stacktrace:
 [1] evaluate(a::HomogeneousPolynomial{Float64}, v::Vector{PolyVar{true}}) (repeats 43253 times)
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:191
 [2] evaluate
   @ ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:191 [inlined]
 [3] evaluate(a::HomogeneousPolynomial{Float64}, v::NTuple{5, PolyVar{true}})
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:191
 [4] _evaluate(a::TaylorN{Float64}, vals::NTuple{5, PolyVar{true}})
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:233
 [5] _evaluate(a::TaylorN{Float64}, vals::NTuple{5, PolyVar{true}}, #unused#::Val{true})
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:239
 [6] evaluate(a::TaylorN{Float64}, vals::Vector{PolyVar{true}}; sorting::Bool)
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:222
 [7] evaluate
   @ ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:222 [inlined]
 [8] (::TaylorN{Float64})(x::Vector{PolyVar{true}})
   @ TaylorSeries ~/.julia/packages/TaylorSeries/YHybm/src/evaluate.jl:327
 [9] top-level scope
   @ REPL[289]:1