我想通过我自己的函数构建ODE函数,这个函数可以被输入到ODEProblem中的DifferentialEquations.jl中。
下面是一个简化的例子。
我有两个结构VariableA & VariableB,我用它们生成A,B。
最后,我想使用A,B来生成ODE函数。
A有一个主微分方程,我想动态地把B加到A中。
这意味着A中可以有0或1或2或更多的B组分。
我不知道从哪里开始。
我能完成这个想法吗?有什么建议吗?
# --------------------------
mutable struct VariableA
main_diffeq
params_for_diffeq::Array # a in main_diffeq_A
B_component
end
function main_diffeq_A(a)
dx = -a * x
end
# --------------------------
# --------------------------
mutable struct VariableB
main_diffeq
params_for_diffeq::Array # b in main_diffeq_B
end
function main_diffeq_B(b)
dx = b * x
end
# --------------------------
# the elements for my differential equations
B = VariableB(main_diffeq_B, [1])
A = VariableA(main_diffeq_A, [1], (B,))在这种情况下,A中只有一个B组分。
但在其他情况下,可能有不同数目的B组分。
下面是我的函数,它将被放入ODEProblem(MyDiffEq!(A), u, t, p)
function MyDiffEq!(A)
# something...
end目标是:
function MyDiffEq!(du, u, p, t)
# A --> dA = -a * A + B
du[1] = -u[1] * p[1] + u[2]
# B
du[2] = u[2] * p[2]
end提前谢谢你!
发布于 2019-04-27 18:34:28
我认为您正在寻找允许编程构造微分方程函数的ModelingToolkit.jl库。自述文件中的示例构建了Lorenz方程:
using ModelingToolkit
# Define some variables
@parameters t σ ρ β
@variables x(t) y(t) z(t)
@derivatives D'~t
eqs = [D(x) ~ σ*(y-x),
D(y) ~ x*(ρ-z)-y,
D(z) ~ x*y - β*z]
de = ODESystem(eqs)
f = ODEFunction(de, [x,y,z], [σ,ρ,β])
prob = ODEProblem(f,[1.0,1.0,1.0],(0.0,100.0),[1.0,3.0,2.0])然后,您可以定义新的变量,这些变量是组合表达式,并在导数方程中使用这些变量。该图书馆正在持续发展(目前为4/27/2019),未来的特性将使将预先建立的微分方程模型更容易地结合起来,从而更容易地建立大型微分方程系统。
https://stackoverflow.com/questions/55880840
复制相似问题