Simulink的求解器

 

或许是因为Simulink的求解器做的比较好,在一般的仿真中,我往往不对于Simulink的求解器作什么更改。所以,对于Simulink的求解器,对于其中的积分算法的不同,对于不同的求解器会产生什么样的仿真结果,我都是不甚了了。

所幸的是绝大多数情况下,求解器的选择不会对于仿真结果产生什么明显的影响。但是,有些概念还是需要了解一下。

 

系统的分类

 

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

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

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

 

定步长和变步长

 

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

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

 

变步长

 

 

变步长连续求解器

 

    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)discrete:当Simulink检查到模型没有连续状态时使用它。

 

定步长

 

 

定步长连续求解器

 

    a) ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。

    b) ode4:四阶龙格-库塔法,具有一定的计算精度。

    c) ode3:固定步长的二/三阶龙格-库塔法。

    d) ode2:改进的欧拉法。

    e) ode1:欧拉法。

 

定步长离散求解器

 

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

 

求解器的选择

 

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

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

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

 

代码生成中的求解器选择

 

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

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

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

 

更深入的探讨

 

各种求解器的不同,以及选择不同的求解器对于仿真结果造成的影响,我还不是很清楚。

对于各种求解器积分算法的研究,明确各种求解器的特点和局限性,对于深入Simulink建模和仿真,是很有意义的。

阅读更多
文章标签: 算法 c
个人分类: Matlab/Simulink
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭