一常微分方程(ODE)包含因变量的一个或多个导数,Y,对于单个自变量,T,通常称为时间。此处用于表示时间导数的符号Y关于T是 对于一阶导数, 对于二阶导数,等等。的顺序常微分方程的导数等于的最高阶导数Y这出现在方程式中。
例如,这是一个二阶常微分方程:
在一个初值问题, ODE从初始状态开始求解。利用初始条件, ,以及获得答案的一段时间, ,迭代获得解决方案。在每一步,解算器将特定算法应用于前一步的结果。在第一步,初始条件提供了允许积分继续进行的必要信息。最终结果是ODE解算器返回一个时间步向量 以及每个步骤的相应解决方案 .
MATLAB中的常微分方程求解器®求解以下类型的一阶常微分方程:
形式的显式常微分方程 .
线性隐式常微分方程 ,在那里 是一个非奇异质量矩阵。质量矩阵可以是时间或状态相关的,也可以是常数矩阵。线性隐式常微分方程涉及一阶导数的线性组合Y,它们被编码在质量矩阵中。
线性隐式ODE始终可以转换为显式形式, . 但是,将质量矩阵直接指定给ODE解算器可以避免这种转换,因为这种转换不方便,并且计算成本较高。
如果
是缺失的,那么方程被调用了微分代数方程,或DAE,DAE系统包含一些代数变量。代数变量是因变量,其导数不会出现在方程中。DAE系统可以通过使用方程的导数来消除代数变量,从而重写为一阶常微分方程的等效系统。将DAE重写为常微分方程所需的导数数称为微分指数ode15s
和ode23t
解算器可以解算索引1 DAE。
形式的完全隐式颂歌
.完全隐式ode不能以显式形式重写,可能还包含一些代数变量。的ode15i
解算器专为完全隐式问题设计,包括索引1 DAE。
对于某些类型的问题,可以使用奥德塞特
函数创建一个选项结构。
您可以指定任意数量的耦合ODE方程进行求解,原则上,方程的数量仅受可用计算机内存的限制N方程,
然后,对方程进行编码的函数返回一个带有N元素,对应于 .例如,考虑二元方程组
编码这些方程的函数是
作用dy=myODE(t,y)dy(1)=y(2);dy(2)=y(1)*y(2)-2;终止
MATLAB ODE解算器只解一阶方程。必须使用通用替换将高阶ODE重写为一阶方程的等效系统
这些替换的结果是一个N一阶方程
例如,考虑三阶常微分方程
使用替换
等效一阶系统的结果
这个方程组的代码是
作用dydt=f(t,y)dydt(1)=y(2);dydt(2)=y(3);dydt(3)=y(1)*y(3)-1;终止
考虑复ODE方程
哪里 .求解时,将实部和虚部分离成不同的解分量,最后将结果重新组合。概念上,这看起来像
例如,如果ODE是 ,则可以使用函数文件表示方程式:
函数f=complexf(t,y)f=y*t+2*i;结束
然后,分离实部和虚部的代码是
作用fv=想象极(t,yv)%从实部和虚部构造yY = yv(1) + i*yv(2);%评估功能yp=复合x(t,y);%返回独立分量中的实部和虚部fv=[真实(yp);图像(yp)];终止
运行解算器以获得解时,初始条件y0
也分为实部和虚部,为每个解分量提供一个初始条件。
y0 = 1 + i;yv0 =[真实(y0);图像放大(y0)];Tspan = [0 2];[t,yv] = ode45(@imaginaryODE, tspan, yv0);
获得解后,将实部和虚部组合在一起以获得最终结果。
y=yv(:,1)+i*yv(:,2);
ode45
在大多数ODE问题上表现良好,通常应该是您的首选解算器。但是,奥德23
,奥德78
,奥德89
和奥德113
可以比ode45
对于精度要求较低或较严格的问题。
一些常微分方程问题刚度,或评估困难。刚度是一个无法精确定义的术语,但一般来说,当问题中某个地方的缩放比例存在差异时,就会出现刚度。例如,如果一个常微分方程有两个解分量,它们在完全不同的时间尺度上发生变化,那么方程可能很僵硬。如果使用非刚性解算器(例如ode45
)无法解决问题或速度非常慢。如果观察到非刚性解算器非常慢,请尝试使用刚性解算器,如ode15s
相反,当使用刚性解算器时,可以通过提供雅可比矩阵或其稀疏模式来提高可靠性和效率。
该表提供了关于何时使用每个不同求解器的一般指南。
解算器 | 问题类型 | 精确 | 什么时候使用 |
---|---|---|---|
ode45 |
该方法 | 中等的 | 大多数时候。 |
奥德23 |
低 |
|
|
奥德113 |
从低到高 |
|
|
奥德78 |
高的 |
|
|
奥德89 |
高的 |
|
|
ode15s |
不易弯曲的 | 低至中等 | 尝试 |
ode23s |
低 |
如果有质量矩阵,它一定是常数。 |
|
ode23t |
低 | 使用
|
|
ode23tb |
低 | 就像 |
|
ode15i |
完全隐式 | 低 | 使用 |
有关何时使用每个求解器的详细信息和进一步建议,请参见[5].
有几个示例文件可以作为大多数ODE问题的极佳起点。运行微分方程示例应用程序,它可以让你轻松地探索和运行示例,输入
odeexamples
要打开单个示例文件进行编辑,请键入
编辑exampleFileName.m
要运行示例,输入
示例文件名
此表包含可用ODE和DAE示例文件的列表,以及它们使用的解算器和选项。包含示例子集的链接,这些示例也直接发布在文档中。
示例文件 | 使用的解算器 | 指定的选项 | 描述 | 文档链接 |
---|---|---|---|---|
amp1dae |
ode23t |
|
刚性DAE -具有常数奇异质量矩阵的电路 |
求解微分代数方程 |
选票 |
奥德23 |
|
简单的事件地点-弹跳球 |
ODE事件位置 |
巴托诺 |
ode45 |
|
具有与时间和状态相关的质量矩阵的常微分方程-指挥棒的运动 |
抛掷棒的运动方程的求解 |
brussode |
ode15s |
|
僵硬的大问题-化学反应中的扩散(布鲁塞尔反应器) |
解刚性常微分方程 |
汉堡汽水 |
ode15s |
|
采用移动网格技术求解了具有强状态依赖质量矩阵的ODE - Burgers方程 |
用强状态相关质量矩阵求解ODE |
女性 |
ode15s |
|
含时质量矩阵的刚性问题——有限元法 |
— |
氧化铁 |
ode23s |
|
常质量矩阵的刚性问题&有限元法 |
— |
HB1电极 |
ode15s |
— | 在很长的时间间隔内解决刚性ODE问题-Robertson化学反应 |
— |
hb1dae |
ode15s |
|
来自守恒定律的刚性线性隐式DAE-Robertson化学反应 |
将Robertson问题作为半显式微分代数方程(DAE)求解 |
ihb1dae |
ode15i |
|
僵硬、完全隐式的DAE-Robertson化学反应 |
用隐式微分代数方程(DAEs)求解Robertson问题 |
伊伯格代码 |
ode15i |
|
隐式ODE系统- Burgers方程 |
— |
基内奥德 |
ode15s |
|
具有非负约束的膝关节问题 |
非负常微分方程解 |
眶极 |
ode45 |
|
高级事件位置-受限三体问题 |
ODE事件位置 |
里吉多德 |
ode45 |
— | 无外力刚体的非刚体欧拉方程 |
解非正则常微分方程 |
vdpode |
ode15s |
|
可参数化范德波尔方程(对于大的刚性μ) |
解刚性常微分方程 |
[1] Shampine,L.F.和M.K.Gordon,常微分方程的计算机解法:初值问题, w·h·弗里曼,旧金山,1975年。
[2] 福赛斯,G.,M.马尔科姆和C.莫勒,数学计算的计算机方法,普伦蒂斯大厅,新泽西州,1977年。
卡哈纳,D. C. Moler和S. Nash,数值方法与软件,普伦蒂斯大厅,新泽西州,1989年。
夏平,l.f.,常微分方程的数值解,查普曼和霍尔,纽约,1994。
[5] Shampine, L. F.和M. W. Reichelt,《MATLAB ODE Suite》暹罗科学计算杂志,第18卷,1997年,第1-22页。
L. F. Shampine, I. Gladwell和S. Thompson,用MATLAB求解常微分方程,剑桥大学出版社,英国剑桥,2003年。