在工程实践中我们经常遇到一些ODEs,其中某些解变换缓慢另一些变化很快,且相差悬殊的微分方程这就是所谓的刚性问题(Stiff),对于所有解的变化相当我们则称为非刚性問题(Nonstiff)
a) ode45:缺省值,四/五阶龙格-库塔法适用于大多数连续或离散系统,但不适用于刚性(stiff)系统它是单步解法器,也就是在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)一般来说,面对一个仿真问题最好是首先试试ode45b) ode23:二/三阶龙格-库塔法,它在误差限要求不高和求解的問题不太难的情况下可能会比ode45更有效。也是一个单步解法器c) ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效ode113是一种多步解法器,也就是在计算当前时刻输出时它需要以前多个时刻的解。d) ode15s:是一种基于数字微分公式的解法器(NDFs)也是一种多步解法器。适用于刚性系统当用户估计要解决的问题是比较困难的,或者不能使用ode45或者即使使用效果也不好,就可以用ode15se) ode23s:它是一种單步解法器,专门应用于刚性系统在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题f) ode23t:是梯形规则的一种自由插值实現。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况g)ode23tb:是TR-BDF2的一种实现, TR-BDF2 ode5:缺省值是ode45的固定步长版本,適用于大多数连续或离散系统不适用于刚性系统。b) ode4:四阶龙格-库塔法具有一定的计算精度。c) ode3:固定步长的二/三阶龙格-库塔法d) ode2:妀进的欧拉法。e) ode1:欧拉法f) discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统
3.因为没有一种算法可以有效地解决所有的ODE问题,为此MATLAB提供了多种求解器Solver,对于不同的ODE问题采用不同的Solver。
一步算法;45阶Runge-Kutta方程;累计截断误差达(△x)3 |
一步算法;2,3阶Runge-Kutta方程;累计截断误差达(△x)3 |
多步法;Adams算法;高低精度均可到10-3~10-6 |
4.在计算过程中用户可以对求解指令solver中的具体执行参数进行设置(如绝对误差、相對误差、步长等)。
绝对误差对应于解向量中的所有元素;向量则分别对应于解向量中的每一分量 |
|
相对误差对应于解向量中的所有元素茬每步(第k步)计算过程中,误差估计为: |
|
若无输出参量则solver将执行下面操作之一: 画出解向量中各元素随时间的变化; 画出解向量中前两个汾量构成的相平面图; 画出解向量中前三个分量构成的三维相空间图; 随计算过程,显示解向量 |
|
若不使用缺省设置则OutputFcn所表现的是那些正整数指定的解向量中的分量的曲线或数据。若为缺省值时则缺省地按上面情形进行操作 |
|
若k>1,则增加每个积分步中的数据点记录使解曲線更加的光滑 |
|
若为‘on’时,返回相应的ode函数的Jacobi矩阵 |
|
为‘on’时返回相应的ode函数的稀疏Jacobi矩阵 |
|
有效值:none、M、 |
M:不随时间变化的常数矩阵 M(t):随时間变化的矩阵 M(t,y):随时间、地点变化的矩阵 |
图形结果为图2-20。