主要内容

选择一个ODE求解器

常微分方程

一个常微分方程(ODE)包含一个因变量的一个或多个导数,y,对于单个自变量,t,通常被称为时间。的导数的表示法y关于t y 对于一阶导数, y 二阶导数,等等。的订单ODE等于的最高阶导数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:

  • 形式的显式颂歌 y f t y

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

    线性隐式ode总是可以转换成显式形式, y 1 t y f t y .然而,直接指定质量矩阵到ODE求解器避免了这种转换,这是不方便的,而且计算成本高。

  • 如果某些成分 y 都不见了,那么方程叫什么微分代数方程,即DAEs, DAEs系统包含一些代数变量.代数变量是因变量,其导数不出现在方程中。通过对方程求导消去代数变量,可以将一阶微分方程的系统重写为一阶微分方程的等价系统。将DAE重写为ODE所需的导数的数量称为微分索引。的ode15s而且ode23t求解器可以求解index-1 dae。

  • 完全隐式的形式赞美诗 f t y y 0 .完全隐式ode不能以显式形式重写,而且还可能包含一些代数变量。的ode15i求解器是为完全隐式问题设计的,包括索引-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

编码这些方程的函数是

函数dy = myODE(t,y) dy(1) = y(2);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.

这个方程组的代码是

函数Dydt = f(t,y) Dydt (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 = 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问题,通常应该是您的首选求解器。然而,ode23ode78ode89而且ode113能比数值对于精度要求较松或较紧的问题。

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

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

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

大多数时候是这样。数值应该是你尝试的第一个解。

ode23

ode23能比数值在粗公差问题,或在中等刚度存在。

ode113 低到高

ode113能比数值在有严格误差容限的问题上,或者当ODE函数的评估成本很高时。

ode78

ode78能比数值对于精度要求较高的光滑解问题。

ode89

ode89能比ode78在非常光滑的问题上,当积分时间间隔很长,或者当公差特别紧的时候。

ode15s 僵硬的 低到中等

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

ode23s

ode23s能比ode15s在粗糙的容错问题上。它可以解决一些棘手的问题ode15s不是有效的。

ode23s计算每一步的雅可比矩阵,因此提供雅可比矩阵via是有益的odeset最大化效率和准确性。

如果有一个质量矩阵,它必须是常数。

ode23t

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

ode23t能解微分代数方程。

ode23tb

就像ode23s,ode23tb求解器可能比ode15s在粗糙的容错问题上。

ode15i 全隐式

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

有关何时使用每种求解器的详细信息和进一步建议,请参见[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方程用移动网格技术求解

求解具有强状态相关质量矩阵的ODE
fem1ode ode15s
  • “质量”

  • “MStateDependence”

  • 的雅可比矩阵

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

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

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

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

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

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

  • “RelTol”

  • “AbsTol”

  • 矢量化的

从守恒定律-罗伯逊化学反应得到的刚性线性隐式DAE

半显式微分代数方程求解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年。

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年。

另请参阅

|

相关的话题

外部网站

Baidu
map