Hi,
I’m experimenting with PDE and the MethodOfLines.jl. I’m trying to figuring out how to correctly declare and use a parameter which is a float64 vector of variable size.
Here is very basic (and useless) code sample where the system is parametrised by a function fc which takes a vector as argument.
using DifferentialEquations, ModelingToolkit
@parameters α
@variables t X(t)
Dt = Differential(t)
function fc(t,α::Vector{Float64})
y = 0.0
for var in α
y += var * sin(t)
end
return y
end
@register fc(t,α::Vector{Float64})
#α=[1.0,2.0]
eq = Dt(X) ~ fc(t,α) * X
@named sys= ODESystem(eq);
X0 = [X=>1.0]
p = [α => [1.0,2.0]];
tspan=(0.0,10.0)
prob=ODEProblem(sys,X0,tspan,p);
Howerver, it fails with the error
ERROR: MethodError: no method matching fc(::Num, ::Num)
Closest candidates are:
fc(::Num, ::SymbolicUtils.Symbolic{<:Vector{Float64}}) at ~/.julia/packages/Symbolics/UrqtQ/src/register.jl:51
fc(::Real, ::SymbolicUtils.Symbolic{<:Vector{Float64}}) at ~/.julia/packages/Symbolics/UrqtQ/src/register.jl:51
fc(::Num, ::Vector{Float64}) at ~/.julia/packages/Symbolics/UrqtQ/src/register.jl:51
Stacktrace:
[1] top-level scope
@ ~/Documents/SISTest.jl:18
when defining eq.
I’m new to ModelingToolkit and Symbolics, I guess I’m not using the parameter \alpha correctly.
Is there a correct and standard way to use vector parameters ?
BTW, the example doesn’t make use of MethodOfLines.jl but it’s the final goal to solve PDE involving functions taking vectors as argument.