Simulink的求解器浅析

文章目录

matlab中simulink是很重要的仿真工具,平时的工作当中大量用到该工具。但是,涉及到连续连续系统及离散系统,求解器的选择很重要。这两天大概的把simulink仿真的基本原理及注意事项学习下,方便以后的工作。本文参考了simulink的求解器这篇文章。

系统的分类

首先需要了解,物理实际中的系统都是连续系统。而Simulink仿真中的”系统”,从计算的本质上说,都应该是离散系统

但是,Simulink中的系统,既有连续系统,又有离散系统,这该怎么理解呢?就我的认识,连续与离散,其实说的是系统的表示形式。比如说一个用S域的传递函数表示的系统,就是连续系统,一个用z函数表示的系统是离散系统。

又引出一个问题,一个系统在Simulink中使用S域的传递函数表示的连续系统,那么,它是怎么运算的呢?其实,这涉及的是数值积分数值微分的问题。虽然Simulink中的系统不可能是连续的,但是,经过一定的运算步长的细分,我们可以得到我们需要的精度的数值解。这样,由于我们可以得到一个时间点足够多,精度上也足够的数值解,那么这个”连续系统”就可以认为是存在的。

定步长和变步长

定步长与变步长的概念比较容易区分,顾名思义,定步长就是仿真是步长固定不变。变步长就是根据运算的需要,步长可以动态调整。

simulink1

下图给出Simulink中的求解器列表:

变步长

变步长连续求解器

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

变步长离散求解器

  • discrete:当Simulink检查到模型没有连续状态时使用它。

定步长

定步长连续求解器

  •  ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。
  •  ode4:四阶龙格-库塔法,具有一定的计算精度。
  •  ode3:固定步长的二/三阶龙格-库塔法。
  •  ode2:改进的欧拉法。
  •  ode1:欧拉法。

定步长离散求解器

  •  discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。

求解器的选择

有了上面的基础,选择求解器时就有了一些原则:

包含连续模块的Simulink模型,是一个”连续系统“。选择求解器的时候可以是定步长的或者变步长的。但是不能选择离散求解器

simulink2

对于一个离散系统,可以任意的选择所有的求解器。可以是定步长,变步长,也可以是连续求解器或者离散求解器

simulink3

 

代码生成中的求解器选择

越来越多的设备使用自动代码生成包括生成XC164可用的代码和生成在AutoBox中运行的代码。

在这些控制器中,一般的,所使用的求解器都是定步长求解器,因为在实时运行中,一般都是每隔固定的时间间隔如1ms调用一次算法程序。

定步长的系统,一般说选择的是连续求解器,因为模型中大多数情况下会包含一些连续的模块,如果确认模型中没有连续模块,也可以使用离散求解器。

 



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/635.html

下一篇文章:

上一篇文章:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

9 + 8 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部