Simulink求解器
Simulink仿真过程
Simulink 模型的执行分几个阶段进行。首先进行的是初始化阶段,在此阶段,Simulink 将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数,确定块的执行顺序,以及分配内存。然后,Simulink 进入到“仿真循环”,每次循环可认为是一个“仿真步”。在每个仿真步期间,Simulink 按照初始化阶段确定的块执行顺序依次执行模型中的每个块。对于每个块而言,Simulink 调用函数来计算块在当前采样时间下的状态,导数和输出。如此反复,一直持续到仿真结束。下图所示为一个仿真的步骤:

Simulink求解器分类
Simulink求解器可分为两大类:变步长求解器和定步长求解器。也可细分为:连续求解与离散求解、隐式求解与显式求解、单步求解与多步求解以及单阶式与变阶式求解。
(1)定步长与变步长求解器
定步长求解器的仿真步长为定制,没有误差控制机制;变步长求解器在仿真过程中需要计算仿真步长,通过增加/减小步长来满足所设定的误差宽容限。在生成实时运算代码时,必须使用定步长求解器,若不打算配置模型代码生成,求解器的选择根据建立模型而定。通常,变步长求解器可以减少仿真时间,定步长求解步长越小,仿真精度越高,故在同样仿真精度要求下,在采用定步长求解器进行仿真时,整个仿真过程必须采用变步长求解器中的最小步长。
(2)连续与离散求解器
在定步长与变步长求解器中均有连续与离散求解器。连续与离散求解器都是依靠模块来计算所有离散状态值。定义离散状态的模块负责在每个步长的时间点计算离散状态值,连续求解器是通过数值积分来计算定义连续状态的模块的状态值。在选择求解器时,必须先确定模型中是否需要离散求解器。在模型中若没有连续状态模块,求解器采用连续、离散均可,若有连续状态模型必须采用连续求解器。
(3)显式与隐式求解器
隐式求解器的应用主要解决模型中的刚性问题,显式求解器应用解决非刚性问题。譬如,在控制系统中,控制部件反应灵敏是快变的,具有小的时间常数,而受控对象一般惯性大事慢变的,具有大的时间常数。通常将具有非常不同时间尺度的系统称之为刚性系统,通俗讲,就是系统中含有时间快变和慢变解分量(同时含有小时间常数和大时间常数的系统)。刚性系统有非常大的恢复能力使得快变化分量的扰动很快就衰减,当数值积分这样一个系统时,一旦快变分量消失时期望选取合适的时间步长用于计算慢变分量。故刚性系统的实质是要计算的解是慢变化,但存在迅速衰减的扰动,这样的扰动出现使得慢变解的数值计算复杂化。故,对系统中的震荡现象,隐式求解远比显式求解稳定,但计算的消耗比显式求解大,它需要在仿真的每个步长利用Newton-like方法计算所产生的雅克比矩阵和代数方程组。为了减少计算消耗,Simulink提供了计算雅克比方法的参数,提高仿真性能。

(4)单步与多步求解器
在Simulink求解库中提供了单步与多步求解器。单步求解就是在计算系统当前时刻y(tn),需要利用前一时刻y(tn-1)以及在tn-1与tn之间多个时间点的微分量(这些时间点称为微步长);多步求解器就是利用系统前多个时刻的值计算当前时刻的值。Simulink提供了一个显式多步求解器ode113和一个隐式多步求解器ode15s,这两个都是变步长求解器。
(5)变阶式求解器
Simulink提供两种变阶式求解器,ode15s求解器利用1阶到5阶仿真;ode113应用1阶到13阶。对于ode15s可以设置最高阶次。
定步长求解器的选择
(1)定步长离散求解器
定步长离散求解器通过在当前时间点的基础上加上仿真步长来计算下一时间点。故,仿真的精度和时间长度取决于仿真步长的大小。步长越小精度越高。仿真步长可以任意设置,当步长设置为缺省时,若模型中含有离散采样模块,Simulink将最小采样步长作为求解器的基步长(通常指最小仿真步长),若没有则默认整个仿真只有50步,仿真步长为仿真时间历程的1/50。
(2)定步长连续求解器
定步长连续求解器通过在当前时间点的基础上加上仿真步长来计算下一时间点,但通过数值积分计算连续状态。利用上一时间点的值和积分微步计算当前时间点的值。定步长连续求解器可以用于计算没有连续状态的模型,但增加计算负担。通常,模型中没有连续状态模块采用离散求解器仿真。
Simulink提供了两种定步长连续求解器:隐式求解和显式求解。主要区别在于计算速度和稳定性方面,隐式比显式的每步计算量大,但稳定性好。
(a)显式定步长连续求解器
Simulink根据数值积分方法的不同分为多种不同显式定步长连续求解器,其系统显函数的数学表达为:
式中,x为状态,h为时间步长,Dx为状态微分,显式求解器利用当前时间点的状态值和状态微分计算下一时间点的状态值。Simulink提供的求解器具体如下表:

这些求解器都没有误差控制机制,仿真精度和持续时间直接由仿真步长控制。表中的求解器根据数值积分方法的复杂度(精度等级)将求解器由简单到复杂排序。在相同的仿真步长设置下,求解器计算越复杂,计算结果精度越高。
在设置求解器时,若选择定步长求解,Simulink默认为ode3,其支持离散和连续状态求解,且仿真性能适中(计算精度和计算消耗),其仿真步长的设置和离散求解器一样,在缺省步长设置时,若模型中有离散状态模块,则将模型中最小采样时间作为求解器的基步长,若没有则默认整个仿真只有50步,仿真步长为仿真时间历程的1/50。
(b)隐式定步长连续求解器
Simulink提供了一种隐式定步长求解器,ode14x。其系统隐函数的数学表达为:
式中,x为状态,h为时间步长,Dx为状态微分,此求解器综合利用牛顿迭代法和外推法,根据当前状态值计算下一时间点的状态。用户可以设置牛顿法迭代次数和外推阶次。迭代次数越大、外推阶次越高,仿真精度越高,同时每一仿真步长的计算负担也越大。
(3)定步长连续求解选择过程
Simulink中的每个定步长连续求解器,只要设置足够小的仿真步长,都能达到期望的计算精度,但通常不实际,故需要选择最佳的求解器,其选择过程如下图所示。

变步长求解器的选择
变步长求解器与定步长求解器一样,包含多个连续求解器和一个离散求解器,两种求解器的选择关键在于模型中是否有状态模块或是否有离散状态模块。
(1)变步长连续求解器
Simulink中的变步长求解器通过增大/减小仿真步长,通过控制局部误差实现仿真精度控制。仿真过程中,在每一时间点都要计算步长,增加了计算开销,但在仿真精度要求下可以减少仿真的步数和仿真时间。
(a)显式变步长连续求解器
显式变步长求解器主要计算无刚度系统,有一下三种。

ode45基于显式Runge—Kutta(4,5)公式,Dormand—Prince对.它是—个单步求解器(solver)。也就是说它在计算y(tn)时,仅仅利用前一步的计算结果y(tn-1).对于大多数问题.在第一次仿真时、可用ode45试一下。
ode23是基于显式Runge—Kutta(2,3).Bogackt和Shampine对.对于宽误差容限和存在轻微刚性的系统、它比ode45更有效一些.ode23也是单步求解器。
ode113是变阶Adams-Bashforth—Moulton PECE求解器.在误差容限比较严时,它比ode45更有效.odell3是一个多步求解器,即为了计算当前的结果y(tn),不仅要知道前一步结果y(tn-1),还要知道前几步的结果y(tn-2),y(tn-3),…。
(b)隐式变步长连续求解器
隐式变步长连续求解器用于解决刚性问题,主要有一下四种:

odel5s是基于数值微分公式(NDFs)的变阶求解器.它与后向微分公式BDFs(也叫Gear方法)有联系,但比它更有效。ode15s是一个多步求解器,如果认为一个问题是刚性的,或者在用ode45s时仿真失败或不够有效时,可以试试odel5s。 odel5s是基于一到五阶的NDF公式的求解器.尽管公式的阶数越高结果越精确,但稳定性会差一些.如果模型是刚性的,并且要求有比较好的稳定性,应将最大的阶数减小到2。选择odel5s求解器时,对话框中会显示这一参数. 可以用ode23求解器代替。del5s,ode23是定步长、低阶求解器。
ode23s是基于一个2阶改进的Rosenbrock公式.因为它是一个单步求解器,所以对于宽误差容限,它比odel5s更有效.对于一些用odel5s不是很有效的刚性问题,可以用它解决。
ode23t是使用“自由”内插式梯形规则来实现的。如果问题是适度刚性,而且需要没有数字阻尼的结果,可采用该求解器。
ode23tb是使用TR—BDF2来实现的,即基于隐式Runge—Kutta公式,其第一级是梯形规则步长和第二级是二阶反向微分公式。两级计算使用相同的迭代矩阵.与ode23s相似,对于宽误差容限,它比odtl5s更有效。
(2)过零检测
变步长求解器利用过零检测处理连续信号。
(3)变步长求解器误差容限
变步长求解器利用标准控制技术监视每一步长的局部误差。在每个仿真步长内,求解器计算步长时间点的状态和局部误差(即状态的局部误差,包括绝度误差和相对误差),并与设置的可接受误差(绝度和相对误差)进行比较,若超出设定值,则减小步长重新计算。
相对误差就是每一仿真步长计算的状态误差,默认为1e-3,即相对误差控制在0.1%。
绝对误差是一个误差界限值。Simulink默认设置为Auto,即所有状态的绝对误差容限初始设置为1e-6。
Simulink仿真参数设置界面
Solver 面板:
(1)仿真时间设置:
Start timeà开始时间:仿真和生成代码为双精度值,单位秒;参数名称为StartTime,参数类型为string。
Stop timeà结束时间:仿真和生成代码为双精度值,单位秒;参数名称为StopTime,参数类型为string;此值应不小于Start time(若相等,则只运行一步),可以设置为无穷大inf。
(2)求解器设置:不同的求解器,具体设置参数也不尽相同,这里指说明共同部分。
变步长求解器由下列构成
Solver
Max step sizeà设置最大步长,缺省为auto,即为仿真时间历程的1/50;参数名称为MaxStep。
Min step sizeà设置最小步长,缺省为auto,即为不限制警告数量,最小步长近似机器精度;可以设置为一个大于零的实数,或者两个元素的数组(在产生错误警告前,第一个元素最小步长,第二个元素为最大步长),参数名称为MinStep
Initial step sizeà求解器第一步执行的时间步长。
Relative tolerance
Absolute tolerance
Shape preservation
Initial step size
Number of consecutive min steps
Zero-crossing control
Time tolerance
Number of consecutive zero crossings
Algorithm
定步长求解器由
Solver
Periodic sample time constraint
Fixed-step size (fundamental sample time)
Tasking mode for periodic sample times
Higher priority value indicates higher task priority
Automatically handle rate transitions for data transfers

Simulink Solver相关推荐

  1. matlab目标支持包安装问题,配置系统目标文件 - MATLAB Simulink - MathWorks 中国

    配置系统目标文件 要对模型进行配置以用于代码生成,请按照选择支持代码生成的求解器和从 STF 浏览器中选择系统目标文件中的步骤进行操作.选择系统目标文件时,其他模型配置参数会相应更改,以满足执行环境的 ...

  2. 查找导致Simulink仿真缓慢的原因

    查找导致仿真缓慢的原因 问题 : 找出模型中在模拟过程中出现运行缓慢的部分. 解决方案 : 使用Simulink求解分析器(Solver Profiler)定位模式中的问题. Simulink求解分析 ...

  3. Simulink仿真教程5---仿真参数设置和示波器的使用

    一.仿真参数的设置 在"Simulation"-"Model Configuration Parameters"中调用仿真参数设置窗口 1.Solver 1). ...

  4. simulink仿真设置

    一.算法设置 1.变步长(Variable-Step)求解器 可以选择的变步长求解器有:ode45,ode23,ode113,odel5s,ode23s和discret.缺省情况下,具有状态的系统用的 ...

  5. simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  6. 频率统计表用c语言_空间矢量脉宽调制建模与仿真(基于C语言的SIMULINK仿真模型 | 基于SVPWM模块的仿真)...

    文末有仿真模型下载方式 1.1 基于C语言的SIMULINK仿真模型 使用C语言在MATLAB/SIMULINK中仿真,需要借助s-function builder模块实现.七段式SVPWM仿真模型如 ...

  7. matlab 绘制符号函数,DAY8 MATLAB学习笔记—simulink入门、MATLAB符号函数的图形绘制...

    如何打开simulink: 启动simulink: 先打开MATLAB软件界面 第一步打开simulink 第二步在command windows输入 simulink然后enter,等待 有很多模块 ...

  8. matlab中solver函数_Simulink求解器(Solver)相关知识

    更多精彩内容参见专业MATLAB技术交流平台--MATLAB技术论坛http://www.matlabsky.com 1.变步长(Variable-Step)求解器 可以选择的变步长求解器有:ode4 ...

  9. simulink快捷键_从EPB模型谈谈Simulink代码生成

    前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题. 1 ...

  10. Simulink中Simscape—Fluids模块(原Simhydraulics)学习记录

    学习来源:http://cn.mathworks.com/help/physmod/hydro/getting-started-with-simhydraulics.html 主要学习内容如下图: 详 ...

最新文章

  1. java struts2 demo,Struts2第一个Demo求指导
  2. 1.深度好文:带缓冲I/O 和不带缓冲I/O的区别与联系
  3. Exchange2013/2016下通过RDB(恢复数据库)还原用户邮箱数据
  4. java 共享锁_Java锁--共享锁和ReentrantReadWriteLock
  5. 腐蚀rust服务器命令_RUST++ MOD
  6. 嵌入式Linux系统编程学习之十六用程序发送信号
  7. python两个等号和一个等号_Python-一个变量等于另一个变量
  8. 创建txt文本文档快捷键设置
  9. mysql数据库知识
  10. 火车采集器V9入门之网址采集 实例讲解
  11. 手机电池容量的一些基础知识
  12. 项目ERP与传统ERP的区别是什么?
  13. cesium加载wms、wmts、tms、wfs服务
  14. 关于Yolov5在测试时,图像大小被调整的问题
  15. matlab x(n)16点DFT,数字信号处理课程设计参考题目
  16. 【网站搭建】腾讯云域名服务器购买域名解析及宝塔安装
  17. EasyExcel获取excel文件中sheet页总数,及对应sheet页名称及下标
  18. 【Linux】设备和磁盘分区|磁盘管理|/dev/sda|/dev/sdb
  19. ABB机器人线速度_ABB机器人输送链跟踪新板卡DSQC2000接线
  20. 零基础搭建属于自己的网站--网页设计【学习笔记10】

热门文章

  1. AOJ-AHU-OJ-592 神奇的叶子
  2. 地震观测仪器的历史和发展趋势(三)
  3. 香槟分校计算机研究生专业,2019伊利诺伊大学香槟分校计算机专业申请要求
  4. 快递查询API接口对接案例(顺丰、圆通、中通、德邦、天天)
  5. java 判断是否夏令时_Java日期夏令时的问题
  6. P卡、worldfirst、连连跨境电商收款哪家好?
  7. 网友心中的高分电影合集,大家一起来拯救剧荒!欢迎补充!!!
  8. 3DMAX,png库错误解决方法
  9. 获取驱动失败Java连接数据库,好哀伤,java连接sql数据库加载驱动就是失败了
  10. 3.NLP中文分词技术