Я хочу построить функцию 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,))
В этом случае у меня есть только один компонент B в A.
Но в других случаях могут быть разные номера компонента 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
Заранее спасибо!