matlab求解器区别

在工程实践中,我们经常遇到一些ODEs,其中某些解变换缓慢,另一些变化很快,且相差悬殊的微分方程,这就是所谓的刚性问题(Stiff),对于所有解的变化相当我们则称为非刚性问题(Nonstiff)。
变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。

a) ode45:缺省值,四/五阶龙格-库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)。一般来说,面对一个仿真问题最好是首先试试ode45。
b) ode23:二/三阶龙格-库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。
c) ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode113是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。
d) ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。
e) ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。
f) ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。
g)ode23tb:是TR-BDF2的一种实现, TR-BDF2 是具有两个阶段的隐式龙格-库塔公式。 
h)discrtet:当Simulink检查到模型没有连续状态时使用它。
固定步长模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。
a) ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。
b) ode4:四阶龙格-库塔法,具有一定的计算精度。
c) ode3:固定步长的二/三阶龙格-库塔法。
d) ode2:改进的欧拉法。
e) ode1:欧拉法。
f) discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。

表2-3

函数指令
含  义
函  数
含    义
求解器
  
Solver
ode23
普通2-3阶法解ODE
odefile
包含ODE的文件
ode23s
低阶法解刚性ODE
选项
odeset
创建、更改Solver选项
ode23t
解适度刚性ODE
odeget
读取Solver的设置值
ode23tb
低阶法解刚性ODE
输出
odeplot
ODE的时间序列图
ode45
普通4-5阶法解ODE
odephas2
ODE的二维相平面图
ode15s
变阶法解刚性ODE
odephas3
ODE的三维相平面图
ode113
普通变阶法解ODE
odeprint
在命令窗口输出结果

3.因为没有一种算法可以有效地解决所有的ODE问题,为此,MATLAB提供了多种求解器Solver,对于不同的ODE问题,采用不同的Solver。

表2-4  不同求解器Solver的特点

求解器Solver
ODE类型
特点
说明
ode45
非刚性
一步算法;4,5阶Runge-Kutta方程;累计截断误差达(△x)3
大部分场合的首选算法
ode23
非刚性
一步算法;2,3阶Runge-Kutta方程;累计截断误差达(△x)3
使用于精度较低的情形
ode113
非刚性
多步法;Adams算法;高低精度均可到10-3~10-6
计算时间比ode45短
ode23t
适度刚性
采用梯形算法
适度刚性情形
ode15s
刚性
多步法;Gear’s反向数值微分;精度中等
若ode45失效时,可尝试使用
ode23s
刚性
一步法;2阶Rosebrock算法;低精度
当精度较低时,计算时间比ode15s短
ode23tb
刚性
梯形算法;低精度
当精度较低时,计算时间比ode15s短

4.在计算过程中,用户可以对求解指令solver中的具体执行参数进行设置(如绝对误差、相对误差、步长等)。

表2-5  Solver中options的属性

属性名
取值
含义
AbsTol
有效值:正实数或向量
  
缺省值:1e-6
绝对误差对应于解向量中的所有元素;向量则分别对应于解向量中的每一分量
RelTol
有效值:正实数
  
缺省值:1e-3
相对误差对应于解向量中的所有元素。在每步(第k步)计算过程中,误差估计为:
  
e(k)<=max(RelTol*abs(y(k)),AbsTol(k))
NormControl
有效值:on、off
  
缺省值:off
为‘on’时,控制解向量范数的相对误差,使每步计算中,满足:norm(e)<=max(RelTol*norm(y),AbsTol)
Events
有效值:on、off
为‘on’时,返回相应的事件记录
OutputFcn
有效值:odeplot、odephas2、odephas3、odeprint
  
缺省值:odeplot
若无输出参量,则solver将执行下面操作之一:
  
画出解向量中各元素随时间的变化;
  
画出解向量中前两个分量构成的相平面图;
  
画出解向量中前三个分量构成的三维相空间图;
  
随计算过程,显示解向量
OutputSel
有效值:正整数向量
  
缺省值:[]
若不使用缺省设置,则OutputFcn所表现的是那些正整数指定的解向量中的分量的曲线或数据。若为缺省值时,则缺省地按上面情形进行操作
Refine
有效值:正整数k>1
  
缺省值:k = 1
若k>1,则增加每个积分步中的数据点记录,使解曲线更加的光滑
Jacobian
有效值:on、off
  
缺省值:off
若为‘on’时,返回相应的ode函数的Jacobi矩阵
Jpattern
有效值:on、off
  
缺省值:off
为‘on’时,返回相应的ode函数的稀疏Jacobi矩阵
Mass
有效值:none、M、
  
M(t)、M(t,y)
  
缺省值:none
M:不随时间变化的常数矩阵
  
M(t):随时间变化的矩阵
  
M(t,y):随时间、地点变化的矩阵
MaxStep
有效值:正实数
  
缺省值:tspans/10
最大积分步长

例2-45  求解描述振荡器的经典的Ver der Pol微分方程file:///C:/Users/lx/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png

y(0)=1,y’(0)=0

令x1=y,x2=dy/dx,则

dx1/dt = x2

dx2/dt = μ(1-x2)-x1

编写函数文件verderpol.m:

function xprime = verderpol(t,x)

global MU

xprime = [x(2);MU*(1-x(1)^2)*x(2)-x(1)];

再在命令窗口中执行:

>>global MU

>>MU = 7;

>>Y0=[1;0]

>>[t,x] = ode45(‘verderpol’,0,40,Y0);

>>x1=x(:,1);x2=x(:,2);

>>plot(t,x1,t,x2)

图形结果为图2-20。


图2-20  Ver der Pol微分方程图
--------------------- 
作者:dengken145 
来源:CSDN 
原文:https://blog.csdn.net/dengken145/article/details/80113508 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(matlab求解器区别)