选择一个ODE求解器
常微分方程
一个常微分方程(ODE)包含一个因变量的一个或多个导数,y,对于单个自变量,t,通常被称为时间。的导数的表示法y关于t是 对于一阶导数, 二阶导数,等等。的订单ODE等于的最高阶导数y这出现在方程中。
例如,这是二阶ODE:
在一个初值问题时,ODE由初始状态开始求解。利用初始条件, 以及得到答案的一段时间, ,迭代求解。每一步求解器对前一步的结果应用特定的算法。在第一个这样的步骤中,初始条件提供了允许进行集成的必要信息。最终的结果是ODE求解器返回一个时间步长的向量 以及每一步对应的解 .
类型的常微分方程
MATLAB中的ODE求解器®解决这类一阶ode:
形式的显式颂歌 .
形式的线性隐式ode ,在那里 是一个非奇异质量矩阵。质量矩阵可以是时间或状态相关的,也可以是常数矩阵。线性隐式ode涉及一阶导数的线性组合y,编码在质量矩阵中。
线性隐式ode总是可以转换成显式形式, .然而,直接指定质量矩阵到ODE求解器避免了这种转换,这是不方便的,而且计算成本高。
如果某些成分 都不见了,那么方程叫什么微分代数方程,即DAEs, DAEs系统包含一些代数变量.代数变量是因变量,其导数不出现在方程中。通过对方程求导消去代数变量,可以将一阶微分方程的系统重写为一阶微分方程的等价系统。将DAE重写为ODE所需的导数的数量称为微分索引。的
ode15s
而且ode23t
求解器可以求解index-1 dae。完全隐式的形式赞美诗 .完全隐式ode不能以显式形式重写,而且还可能包含一些代数变量。的
ode15i
求解器是为完全隐式问题设计的,包括索引-1 dae。
方法可以为某些类型的问题的求解器提供附加信息odeset
函数来创建一个选项结构。
系统的常微分方程
你可以指定任意数量的耦合ODE方程来求解,原则上方程的数量只受可用计算机内存的限制。如果方程组有n方程,
然后编码方程的函数返回一个向量n元素,对应于的值 .例如,考虑两个方程的系统
编码这些方程的函数是
函数dy = myODE(t,y) dy(1) = y(2);dy (2) = y y (1) * (2) 2;结束
高阶常微分方程
MATLAB ODE求解器只解一阶方程。您必须使用泛型替换将高阶ode重写为一阶方程的等价系统
这些替换的结果是一个系统n一阶方程
例如,考虑三阶ODE
使用替换
结果是等价的一阶系统
这个方程组的代码是
函数Dydt = f(t,y) Dydt (1) = y(2);dydt (2) = y (3);dydt (3) = y y (3) (1) * 1;结束
复杂的常微分方程
考虑复杂的ODE方程
在哪里 .将实部和虚部分离成不同的解分量,最后将结果重新组合。从概念上讲,这看起来像
例如,如果ODE是 ,然后你可以用函数文件来表示这个方程:
函数f = complexf(t,y) f = y *t + 2*i;结束
那么,分离实部和虚部的代码是
函数阵线= imaginaryODE (t,青年志愿)由实分量和虚分量构造Y = yv(1) + i*yv(2);%评估函数yp = complexf (t、y);分别返回实数和虚数分量阵线=[真实(yp);图像放大(yp)];结束
当你运行解算器获得解时,初始条件y0
还分为实部和虚部,为每个解分量提供初始条件。
y0 = 1 + i;yv0 =[真实(y0);图像放大(y0)];Tspan = [0 2];[t,yv] = ode45(@imaginaryODE, tspan, yv0);
一旦你得到了解,把实分量和虚分量结合起来,就可以得到最终的结果。
Y = yv(:,1) + i*yv(:,2);
基本求解器的选择
数值
可以很好地解决大多数ODE问题,通常应该是您的首选求解器。然而,ode23
,ode78
,ode89
而且ode113
能比数值
对于精度要求较松或较紧的问题。
一些ODE问题的展示刚度,或评价困难。刚度是一个难以精确定义的术语,但一般来说,当问题中某个地方的比例不同时,就会出现刚度。例如,如果一个ODE有两个解分量,它们在不同的时间尺度上变化很大,那么这个方程可能是刚性的。如果非刚性求解器(例如数值
)无法解决问题或速度极慢。如果您观察到非刚性求解器非常慢,请尝试使用刚性求解器,如ode15s
代替。当使用刚性求解器时,可以通过提供雅可比矩阵或其稀疏模式来提高可靠性和效率。
该表提供了关于何时使用每种不同求解器的一般指南。
解算器 | 问题类型 | 精度 | 什么时候使用 |
---|---|---|---|
数值 |
该方法 | 媒介 | 大多数时候是这样。 |
ode23 |
低 |
|
|
ode113 |
低到高 |
|
|
ode78 |
高 |
|
|
ode89 |
高 |
|
|
ode15s |
僵硬的 | 低到中等 | 试一试 |
ode23s |
低 |
如果有一个质量矩阵,它必须是常数。 |
|
ode23t |
低 | 使用
|
|
ode23tb |
低 | 就像 |
|
ode15i |
全隐式 | 低 | 使用 |
有关何时使用每种求解器的详细信息和进一步建议,请参见[5].
ODE示例和文件摘要
有几个可用的示例文件可以作为大多数ODE问题的优秀起点。运行微分方程的例子应用程序,它可以让你轻松地探索和运行示例,键入
odeexamples
要打开单个示例文件进行编辑,请键入
编辑exampleFileName.m
要运行一个示例,输入
exampleFileName
该表包含可用的ODE和DAE示例文件以及它们使用的求解器和选项的列表。还包含了示例子集的链接,这些示例也直接发布在文档中。
示例文件 | 解算器使用 | 选项指定 | 描述 | 文档链接 |
---|---|---|---|---|
amp1dae |
ode23t |
|
刚性DAE -具有恒定奇异质量矩阵的电路 |
求解刚性晶体管微分代数方程 |
ballode |
ode23 |
|
简单的活动地点-弹跳球 |
歌唱活动的位置 |
batonode |
数值 |
|
具有时间和状态相关质量矩阵的ODE -棒的运动 |
解抛向空中的接力棒运动方程 |
brussode |
ode15s |
|
刚性大问题-化学反应中的扩散(布鲁塞尔) |
解决刚性常微分方程 |
burgersode |
ode15s |
|
具有强状态相关质量矩阵的ODE - Burgers方程用移动网格技术求解 |
求解具有强状态相关质量矩阵的ODE |
fem1ode |
ode15s |
|
刚性问题的时变质量矩阵-有限元法 |
- - - - - - |
fem2ode |
ode23s |
|
刚性问题的定质量矩阵-有限元法 |
- - - - - - |
hb1ode |
ode15s |
- - - - - - | 刚性ODE问题在很长的时间间隔上得到了解决-罗伯逊化学反应 |
- - - - - - |
hb1dae |
ode15s |
|
从守恒定律-罗伯逊化学反应得到的刚性线性隐式DAE |
半显式微分代数方程求解Robertson问题 |
ihb1dae |
ode15i |
|
僵硬,完全隐式DAE - Robertson化学反应 |
用隐式微分代数方程(DAEs)求解Robertson问题 |
iburgersode |
ode15i |
|
隐式ODE系统- Burgers方程 |
- - - - - - |
kneeode |
ode15s |
|
非负性约束的“膝盖问题” |
非负的颂歌的解决方案 |
orbitode |
数值 |
|
高级事件定位-限制三体问题 |
歌唱活动的位置 |
rigidode |
数值 |
- - - - - - | 非刚性问题-无外力刚体的欧拉方程 |
解决该常微分方程 |
vdpode |
ode15s |
|
可参数化的范德波尔方程(大的刚性μ) |
解决刚性常微分方程 |
参考文献
香波,l.f.和M. K.戈登,常微分方程的计算机解法:初值问题, w·h·弗里曼,旧金山,1975年。
G.福赛斯,M.马尔科姆和C.莫勒,数学计算的计算机方法“,,普伦蒂斯-霍尔,新泽西州,1977年。
卡哈纳,D.莫勒,S.纳什,数值方法和软件,普伦蒂斯-霍尔,新泽西州,1989年。
香波,l.f。常微分方程的数值解查普曼和霍尔,纽约,1994年。
[5] Shampine, l.f .和M. W. Reichelt,《MATLAB ODE套件》SIAM科学计算杂志1997年,第18卷,第1-22页。
香皮恩,l.f,格拉德威尔,i.s Thompson,用MATLAB求解ode英国剑桥大学出版社,2003年。