2026a
# ODESystem
创建常微分方程系统
函数库: TySymbolicMath
# 语法
ODESystem(eqs,t,dvs, ps)
# 说明
创建常微分方程系统。示例
# 示例
创建常微分方程系统
创建参数,自变量及状态变量
using TySymbolicMath
using ModelingToolkit
@parameters σ ρ β
@variables t x(t) y(t) z(t)
3-element Vector{Num}:
σ
ρ
β
4-element Vector{Num}:
t
x(t)
y(t)
z(t)
创建微分方法
D = Differential(t)
D = (::Differential) (generic function with 3 methods)
创建方程
eqs = [D(x) ~ σ*(y-x),
D(y) ~ x*(ρ-z)-y,
D(z) ~ x*y - β*z]
eqs = 3-element Vector{Equation}:
Differential(t)(x(t)) ~ σ*(y(t) - x(t))
Differential(t)(y(t)) ~ (ρ - z(t))*x(t) - y(t)
Differential(t)(z(t)) ~ x(t)*y(t) - β*z(t)
利用@named 和ODESystem函数将方程形式的向量转换为常微分方程系统
@named ode = ODESystem(eqs,t,[x,y,z],[σ,ρ,β])
ode = Model ode with 3 equations
States (3):
x(t)
y(t)
z(t)
Parameters (3):
σ
ρ
β
# 输入参数
eqs - 方程组
eqs为由~连接的方程组构成的方程组向量,且为调用ODESystem函数必须传入参数
t - 自变量
t为ODE系统中的自变量,且为调用ODESystem函数必须传入参数,表示对该变量求导
dvs - 状态变量
由未知变量组成的向量,且为调用ODESystem函数必须传入参数,表示该状态变量对自变量求导
ps - 已知参数
由已知参数组成的向量,且为调用ODESystem函数必须传入参数
# 提示
- 在调用ODESystem时,eqs,t,dvs,ps为必须传入参数
- 利用@named 和 ODESystem创建系统后,其系统本身是一个结构体,可以查看系统的相关信息,结构体信息如下:
| 字段 | 含义 |
|---|---|
| eqs | 定义系统的方程向量 |
| iv | 自变量 |
| states | 未知变量 |
| ps | 已知参数 |
| ctrls | 控制参数(ps 的某个子集) |
| var_to_name | 数组变量 |
| jac | 雅可比矩阵:注意:这个字段直到在系统上调用calculate_jacobian才会定义 |
| tgrad | 时间导数矩阵。注意:在系统上调用 calculate_tgrad 之前,不会定义此字段。 |
| ctrl_jac | 控制雅可比矩阵。注意:在系统上调用 calculate_control_jacobian 之前,不会定义此字段。 |
| Wfact | Wfact_t 矩阵。 注意:这个字段直到generate_factorized_W 在系统上被调用。 |
| name | 系统名称 |
| systems | 系统:内部系统 |
| defaults | 默认值:在 ODEProblem 中未提供初始条件和/或参数时使用的默认值。 |
| structure | 结构:系统的结构信息 |
| connection_type | connection_type:系统类型 |
| preface | 在评估之前注入赋值语句RHS 函数。 |
| continuous_events | 对事件建模的 Vector{SymbolicContinuousCallback}。 积分器将使用求根来保证它在每个过零处步进。 |