我正在尝试求解 Julia 的modelingTookKit.JL 中的微分代数方程,其中向量场的形式为 f(X) = 0。
我在下面的链接modelingToolkit.JL DAE]( https://benchmarks.sciml.ai/html/DAE/ROBERDAE.html )中找到了一个DAE示例,代码如下。但是,当我更换说
D(y₁) ~ -k₁*y₁ + k₃*y₂*y₃
经过
0 ~ -k₁*y₁ + k₃*y₂*y₃ - D(y₁)
我得到一个错误。如果有人知道或可以提供一个示例,其中矢量场的方程仅被隐式定义,即 f(X) = 0,将不胜感激。
using OrdinaryDiffEq, DiffEqDevTools, Sundials, ModelingToolkit, ODEInterfaceDiffEq,
Plots, DASSL, DASKR
using LinearAlgebra
@variables t y₁(t)=1.0 y₂(t)=0.0 y₃(t)=0.0
@parameters k₁=0.04 k₂=3e7 k₃=1e4
D = Differential(t)
eqs = [
D(y₁) ~ -k₁*y₁ + k₃*y₂*y₃
D(y₂) ~ k₁*y₁ - k₃*y₂*y₃ - k₂*y₂^2
0 ~ y₁ + y₂ + y₃ - 1
]
@named sys = ODESystem(eqs)
simpsys = structural_simplify(sys)
mmprob = ODEProblem(sys,[],(0.0,1e5))
daeprob = DAEProblem(sys,[D(y₁)=>-0.04,
D(y₂)=>0.04,
D(y₃)=>0.0],[],(0.0,1e5))
odaeprob = ODAEProblem(simpsys,[],(0.0,1e5))
ref_sol = solve(daeprob,IDA(),abstol=1/10^14,reltol=1/10^14);
ode_ref_sol = solve(odaeprob,CVODE_BDF(),abstol=1/10^14,reltol=1/10^14);
probs = [mmprob,daeprob,odaeprob]
refs = [ref_sol,ref_sol,ode_ref_sol];