主要内容

选择一个ODE解算器

常微分方程

常微分方程(ODE)包含因变量的一个或多个导数,Y,对于单个自变量,T,通常称为时间。此处用于表示时间导数的符号Y关于T Y ' 对于一阶导数, Y ' ' 对于二阶导数,等等。的顺序常微分方程的导数等于的最高阶导数Y这出现在方程式中。

例如,这是一个二阶常微分方程:

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中的常微分方程求解器®求解以下类型的一阶常微分方程:

  • 形式的显式常微分方程 Y ' = F ( T , Y )

  • 线性隐式常微分方程 M ( T , Y ) Y ' = F ( T , Y ) ,在那里 M ( T , Y ) 是一个非奇异质量矩阵。质量矩阵可以是时间或状态相关的,也可以是常数矩阵。线性隐式常微分方程涉及一阶导数的线性组合Y,它们被编码在质量矩阵中。

    线性隐式ODE始终可以转换为显式形式, Y ' = M 1. ( T , Y ) F ( T , Y ) . 但是,将质量矩阵直接指定给ODE解算器可以避免这种转换,因为这种转换不方便,并且计算成本较高。

  • 如果 Y ' 是缺失的,那么方程被调用了微分代数方程,或DAE,DAE系统包含一些代数变量。代数变量是因变量,其导数不会出现在方程中。DAE系统可以通过使用方程的导数来消除代数变量,从而重写为一阶常微分方程的等效系统。将DAE重写为常微分方程所需的导数数称为微分指数ode15sode23t解算器可以解算索引1 DAE。

  • 形式的完全隐式颂歌 F ( T , Y , Y ' ) = 0 .完全隐式ode不能以显式形式重写,可能还包含一些代数变量。的ode15i解算器专为完全隐式问题设计,包括索引1 DAE。

对于某些类型的问题,可以使用奥德塞特函数创建一个选项结构。

颂歌体系

您可以指定任意数量的耦合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(1)*y(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 )

例如,考虑三阶常微分方程

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(1)*y(3)-1;终止

复赋

考虑复ODE方程

Y ' = F ( T , Y ) ,

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

Y v = [ 真实的 ( Y ) Imag ( Y ) ] F v = [ 真实的 ( F ( T , Y ) ) Imag ( F ( T , Y ) ) ]

例如,如果ODE是 Y ' = Y T + 2. ,则可以使用函数文件表示方程式:

函数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 该方法 中等的

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

奥德23

奥德23可以比ode45存在粗公差问题,或存在中等刚度。

奥德113 从低到高

奥德113可以比ode45在具有严格误差公差的问题上,或者当ODE函数的评估成本很高时。

奥德78 高的

奥德78可以比ode45对于具有高精度要求的平滑解决方案的问题。金宝搏官方网站

奥德89 高的

奥德89可以比奥德78在非常平滑的问题上,当积分时间间隔较长时,或当公差特别紧时。

ode15s 不易弯曲的 低至中等

尝试ode15sode45失败或效率低下,并且您怀疑问题严重。请使用ode15s求解微分代数方程(DAE)时。

ode23s

ode23s可以比ode15s在粗差公差的问题上,它可以解决一些难以解决的问题ode15s这是无效的。

ode23s计算每个步骤中的雅可比矩阵,因此通过奥德塞特最大限度地提高效率和准确性。

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

ode23t

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

ode23t可以解微分代数方程(DAE)。

ode23tb

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

ode15i 完全隐式

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

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

ODE示例和文件的摘要

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

odeexamples

要打开单个示例文件进行编辑,请键入

编辑exampleFileName.m

要运行示例,输入

示例文件名

此表包含可用ODE和DAE示例文件的列表,以及它们使用的解算器和选项。包含示例子集的链接,这些示例也直接发布在文档中。

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

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

求解微分代数方程
选票 奥德23
  • “事件”

  • “OutputFcn”

  • “输出选择”

  • “精炼”

  • “初始步骤”

  • “MaxStep”

简单的事件地点-弹跳球

ODE事件位置
巴托诺 ode45
  • “弥撒”

具有与时间和状态相关的质量矩阵的常微分方程-指挥棒的运动

抛掷棒的运动方程的求解
brussode ode15s
  • “JPattern”

  • “矢量化”

僵硬的大问题-化学反应中的扩散(布鲁塞尔反应器)

解刚性常微分方程
汉堡汽水 ode15s
  • “弥撒”

  • “依赖性”

  • “JPattern”

  • “MvPattern”

  • “雷托”

  • “Absol”

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

用强状态相关质量矩阵求解ODE
女性 ode15s
  • “弥撒”

  • “依赖性”

  • 的雅可比矩阵

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

氧化铁 ode23s
  • “弥撒”

常质量矩阵的刚性问题&有限元法

HB1电极 ode15s

在很长的时间间隔内解决刚性ODE问题-Robertson化学反应

hb1dae ode15s
  • “弥撒”

  • “雷托”

  • “Absol”

  • “矢量化”

来自守恒定律的刚性线性隐式DAE-Robertson化学反应

将Robertson问题作为半显式微分代数方程(DAE)求解
ihb1dae ode15i
  • “雷托”

  • “Absol”

  • 的雅可比矩阵

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

用隐式微分代数方程(DAEs)求解Robertson问题
伊伯格代码 ode15i
  • “雷托”

  • “Absol”

  • 的雅可比矩阵

  • “JPattern”

隐式ODE系统- Burgers方程

基内奥德 ode15s
  • “非负”

具有非负约束的膝关节问题

非负常微分方程解
眶极 ode45
  • “雷托”

  • “Absol”

  • “事件”

  • “OutputFcn”

高级事件位置-受限三体问题

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

另见

|

相关话题

外部网站