选择一个ODE求解器

常微分方程

一个常微分方程(ODE)包含一个或多个因变量的导数,y,对于单个自变量,t,通常称为时间。这里用来表示的导数的符号y关于t y 对于一阶导数, y 对于二阶导数,等等。的订单的最高阶导数y它出现在方程中。

例如,这是一个二阶ODE:

y 9 y

在一个初值问题, ODE从初始状态开始求解。利用初始条件, y 0 ,以及需要一段时间才能得到答案, t 0 t f ,迭代求解。在每一步,求解器都对前一步的结果应用特定的算法。在这样的第一步,初始条件提供了必要的信息,允许进行集成。最后的结果是ODE求解器返回一个时间步长的向量 t t 0 t 1 t 2 ... t f 以及每一步对应的解决方案 y y 0 y 1 y 2 ... y f

类型的常微分方程

MATLAB中的ODE求解器®解决这些类型的一阶ode:

  • 显式ode的形式 y f t y

  • 这种形式的线性隐函数 t y y f t y ,在那里 t y 是一个非奇异质量矩阵。质量矩阵可以是与时间或状态相关的,也可以是常数矩阵。线性隐式ode涉及的是的一阶导数的线性组合y,它们被编码在质量矩阵中。

    线性隐式ode总是可以转化为显式形式, y 1 t y f t y .然而,直接向ODE求解器指定质量矩阵可以避免这种转换,这是不方便的,可能是计算昂贵的。

  • 如果某些成分 y 是缺失的,那么方程被调用了微分代数方程,或dae,并且dae系统包含一些代数变量.代数变量是方程中没有导数的因变量。通过对方程组求导,消去代数变量,可将一阶ode方程组改写为一阶ode的等价方程组。将DAE重写为ODE所需的导数数称为微分索引。的ode15sode23t求解器可以解决index-1 dae。

  • 形式的完全隐式ode f t y y 0 .完全隐式ode不能以显式形式重写,可能还包含一些代数变量。的ode15isolver是为完全隐式问题设计的,包括index-1 dae。

属性可以为某些类型的问题的求解器提供附加信息odeset函数创建一个选项结构。

系统的常微分方程

您可以指定任意数量的耦合ODE方程来求解,原则上,方程的数量只受可用计算机内存的限制。如果方程组有n方程,

y 1 y 2 y n f 1 t y 1 y 2 ... y n f 2 t y 1 y 2 ... y n f n t y 1 y 2 ... y n

然后对方程进行编码的函数返回一个带有的向量n元素,对应于 y 1 y 2 ... y n .例如,考虑二元方程组

y 1 y 2 y 2 y 1 y 2 2

编码这些方程的函数是

函数myODE(t,y) = myODE(t,y)dy (2) = y y (1) * (2) 2;

高阶常微分方程

MATLAB ODE求解器只解决一阶方程。您必须使用泛型替换将高阶ode重写为一阶方程的等价系统

y 1 y y 2 y y 3. y y n y n 1

这些替换的结果是一个n一阶方程

y 1 y 2 y 2 y 3. y n f t y 1 y 2 ... y n

例如,考虑三阶ODE

y y y + 1 0.

使用替换

y 1 y y 2 y y 3. y

结果是等价的一阶系统

y 1 y 2 y 2 y 3. y 3. y 1 y 3. 1.

这个方程组的代码如下

函数y(1) = y(2);dydt (2) = y (3);dydt (3) = y y (3) (1) * 1;

复杂的常微分方程

考虑复ODE方程

y f t y

在哪里 y y 1 + y 2 .求解时,将实部和虚部分离成不同的解分量,最后将结果重新组合。概念上,这看起来像

y v 真正的 y 图像放大 y f v 真正的 f t y 图像放大 f t y

例如,如果ODE是 y y t + 2 ,则可以使用函数文件表示该方程。

定义接受并返回复数值f = y的函数。

然后,分离实部和虚部的代码是

函数阵线= imaginaryODE (t,青年志愿)%由实分量和虚分量构造yY = 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问题中表现良好,通常应该是您的首选解算器。然而,ode23ode113可以比数值对于精度要求较松或较紧的问题。

一些ODE问题刚度,或评价困难。刚度是一个无法精确定义的术语,但一般来说,当问题中某个地方的缩放存在差异时,刚度就会出现。例如,如果一个ODE有两个解组件,它们在完全不同的时间尺度上变化,那么这个方程可能是僵硬的。如果一个问题不是僵硬的解决者(例如数值)无法解决问题或速度极慢。如果您观察到非刚性求解器非常慢,请尝试使用刚性求解器,例如ode15s代替。当使用刚性求解器时,您可以通过提供雅可比矩阵或其稀疏模式来提高可靠性和效率。

该表提供了关于何时使用每个不同求解器的一般指南。

解算器 问题类型 精度 什么时候使用
数值 该方法 媒介

大多数时候。数值应该是你第一个尝试解决问题的人。

ode23

ode23可以比数值在粗公差或中度硬度存在的问题上。

ode113 低到高

ode113可以比数值在有严格的误差容忍度的问题上,或者当ODE函数的计算代价很高时。

ode15s 僵硬的 低到中等

试一试ode15s数值失败或效率低下,你怀疑问题是僵硬的。也使用ode15s在求解微分代数方程(DAEs)时。

ode23s

ode23s可以比ode15s在粗公差问题上。它可以解决一些棘手的问题ode15s不是有效的。

ode23s计算每一步的雅可比矩阵,因此通过提供雅可比矩阵是有益的odeset最大限度地提高效率和准确性。

如果有质量矩阵,它一定是常数。

ode23t

使用ode23t如果问题只是中等刚度,你需要一个没有数值阻尼的解。

ode23t能解微分代数方程。

ode23tb

就像ode23s,ode23tb解算器可能比ode15s在粗公差问题上。

ode15i 全隐式

使用ode15i对于完全隐式问题f (t、y, y”)0对于指数为1的微分代数方程(DAEs)。

有关何时使用每个求解器的详细信息和进一步建议,请参见[5]

ODE示例和文件的摘要

有几个示例文件可以作为大多数ODE问题的极佳起点。运行微分方程的例子应用程序,它可以让你轻松地探索和运行示例,输入

odeexamples

要打开单独的示例文件进行编辑,输入

编辑exampleFileName.m

要运行示例,输入

exampleFileName

该表包含可用的ODE和DAE示例文件的列表,以及它们使用的求解器和选项。文档中还包含了直接发布的示例子集的链接。

示例文件 解算器使用 选项指定 描述 文档链接
amp1dae ode23t
  • “质量”

刚性DAE -具有常数奇异质量矩阵的电路

求解刚性微分代数方程
ballode ode23
  • “事件”

  • “OutputFcn”

  • “OutputSel”

  • “完善”

  • “InitialStep”

  • “MaxStep”

简单的事件地点-弹跳球

歌唱活动的位置
batonode 数值
  • “质量”

带有与时间和状态相关的质量矩阵运动的棒的ODE

- - - - - -
brussode ode15s
  • “JPattern”

  • 矢量化的

棘手的大问题——化学反应中的扩散(布鲁塞尔)

解决刚性常微分方程
burgersode ode15s
  • “质量”

  • “MStateDependence”

  • “JPattern”

  • “MvPattern”

  • “RelTol”

  • “AbsTol”

采用移动网格技术求解了具有强状态依赖质量矩阵的ODE - Burgers方程

- - - - - -
fem1ode ode15s
  • “质量”

  • “MStateDependence”

  • 的雅可比矩阵

含时质量矩阵的刚性问题-有限元法

- - - - - -
fem2ode ode23s
  • “质量”

用定质量矩阵-有限元法求解刚性问题

- - - - - -
hb1ode ode15s - - - - - -

刚性ODE问题是在很长时间间隔罗伯逊化学反应上解决的

- - - - - -
hb1dae ode15s
  • “质量”

  • “RelTol”

  • “AbsTol”

  • 矢量化的

刚性,线性隐式DAE来自守恒定律-罗伯逊化学反应

用半显式微分代数方程(DAEs)求解Robertson问题
ihb1dae ode15i
  • “RelTol”

  • “AbsTol”

  • 的雅可比矩阵

僵硬的,完全隐式的DAE - Robertson化学反应

用隐式微分代数方程(DAEs)求解Robertson问题
iburgersode ode15i
  • “RelTol”

  • “AbsTol”

  • 的雅可比矩阵

  • “JPattern”

隐式ODE系统- Burgers方程

- - - - - -
kneeode ode15s
  • 非负的

非负性约束的“膝盖问题”

非负的颂歌的解决方案
orbitode 数值
  • “RelTol”

  • “AbsTol”

  • “事件”

  • “OutputFcn”

高级事件地点-限制三体问题

歌唱活动的位置
rigidode 数值 - - - - - -

非刚性问题-无外力刚体的欧拉方程

解决该常微分方程
vdpode ode15s
  • 的雅可比矩阵

可参数化范德波尔方程(对于大的刚性μ

解决刚性常微分方程

参考文献

L. F.和M. K.戈登,常微分方程的计算机解法:初值问题, w·h·弗里曼,旧金山,1975年。

Forsythe, G. M. Malcolm和C. Moler,数学计算的计算机方法1977年,新泽西州普伦蒂斯-霍尔。

卡哈纳,D. C. Moler和S. Nash,数值方法与软件,普伦蒂斯霍尔,新泽西州,1989年。

夏平,l.f.,常微分方程的数值解,查普曼和霍尔,纽约,1994。

[5] Shampine, L. F.和M. W. Reichelt,《MATLAB ODE Suite》SIAM科学计算杂志,第18卷,1997年,第1-22页。

L. F. Shampine, I. Gladwell和S. Thompson,用MATLAB求解ode,剑桥大学出版社,2003年。

另请参阅

|

相关的话题

外部网站