Simulink求解器
Simulink仿真过程
Simulink 模型的执行分几个阶段进行。首先进行的是初始化阶段,在此阶段,Simulink 将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数,确定块的执行顺序,以及分配内存。然后,Simulink 进入到“仿真循环”,每次循环可认为是一个“仿真步”。在每个仿真步期间,Simulink 按照初始化阶段确定的块执行顺序依次执行模型中的每个块。对于每个块而言,Simulink 调用函数来计算块在当前采样时间下的状态,导数和输出。如此反复,一直持续到仿真结束。下图所示为一个仿真的步骤:
Simulink求解器分类
Simulink求解器可分为两大类:变步长求解器和定步长求解器。也可细分为:连续求解与离散求解、隐式求解与显式求解、单步求解与多步求解以及单阶式与变阶式求解。
(1)定步长与变步长求解器
定步长求解器的仿真步长为定制,没有误差控制机制;变步长求解器在仿真过程中需要计算仿真步长,通过增加/减小步长来满足所设定的误差宽容限。在生成实时运算代码时,必须使用定步长求解器,若不打算配置模型代码生成,求解器的选择根据建立模型而定。通常,变步长求解器可以减少仿真时间,定步长求解步长越小,仿真精度越高,故在同样仿真精度要求下,在采用定步长求解器进行仿真时,整个仿真过程必须采用变步长求解器中的最小步长。
(2)连续与离散求解器
在定步长与变步长求解器中均有连续与离散求解器。连续与离散求解器都是依靠模块来计算所有离散状态值。定义离散状态的模块负责在每个步长的时间点计算离散状态值,连续求解器是通过数值积分来计算定义连续状态的模块的状态值。在选择求解器时,必须先确定模型中是否需要离散求解器。在模型中若没有连续状态模块,求解器采用连续、离散均可,若有连续状态模型必须采用连续求解器。
(3)显式与隐式求解器
隐式求解器的应用主要解决模型中的刚性问题,显式求解器应用解决非刚性问题。譬如,在控制系统中,控制部件反应灵敏是快变的,具有小的时间常数,而受控对象一般惯性大事慢变的,具有大的时间常数。通常将具有非常不同时间尺度的系统称之为刚性系统,通俗讲,就是系统中含有时间快变和慢变解分量(同时含有小时间常数和大时间常数的系统)。刚性系统有非常大的恢复能力使得快变化分量的扰动很快就衰减,当数值积分这样一个系统时,一旦快变分量消失时期望选取合适的时间步长用于计算慢变分量。故刚性系统的实质是要计算的解是慢变化,但存在迅速衰减的扰动,这样的扰动出现使得慢变解的数值计算复杂化。故,对系统中的震荡现象,隐式求解远比显式求解稳定,但计算的消耗比显式求解大,它需要在仿真的每个步长利用Newton-like方法计算所产生的雅克比矩阵和代数方程组。为了减少计算消耗,Simulink提供了计算雅克比方法的参数,提高仿真性能。
(4)单步与多步求解器
在Simulink求解库中提供了单步与多步求解器。单步求解就是在计算系统当前时刻y(tn),需要利用前一时刻y(tn-1)以及在tn-1tn之间多个时间点的微分量(这些时间点称为微步长);多步求解器就是利用系统前多个时刻的值计算当前时刻的值。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提供的求解器具体如下表:
求解器
积分方法
精度等级
ode1
Euler’s Method
1
ode2
Heun’s Method
2
ode3
Bogacki-Shampine Formula
3
ode4
Fourth-Order Runge-Kutta (RK4)Formula
4
ode5
Dormand-Prince(RK5)Formula
5
ode8
Dormand-Prince RK8(7) Formula
8
这些求解器都没有误差控制机制,仿真精度和持续时间直接由仿真步长控制。表中的求解器根据数值积分方法的复杂度(精度等级)将求解器由简单到复杂排序。在相同的仿真步长设置下,求解器计算越复杂,计算结果精度越高。
在设置求解器时,若选择定步长求解,Simulink默认为ode3,其支持离散和连续状态求解,且仿真性能适中(计算精度和计算消耗),其仿真步长的设置和离散求解器一样,在缺省步长设置时,若模型中有离散状态模块,则将模型中最小采样时间作为求解器的基步长,若没有则默认整个仿真只有50步,仿真步长为仿真时间历程的1/50。
(b)隐式定步长连续求解器
Simulink提供了一种隐式定步长求解器,ode14x。其系统隐函数的数学表达为:
式中,x为状态,h为时间步长,Dx为状态微分,此求解器综合利用牛顿迭代法和外推法,根据当前状态值计算下一时间点的状态。用户可以设置牛顿法迭代次数和外推阶次。迭代次数越大、外推阶次越高,仿真精度越高,同时每一仿真步长的计算负担也越大。
(3)定步长连续求解选择过程
Simulink中的每个定步长连续求解器,只要设置足够小的仿真步长,都能达到期望的计算精度,但通常不实际,故需要选择最佳的求解器,其选择过程如下图所示。
变步长求解器的选择
变步长求解器与定步长求解器一样,包含多个连续求解器和一个离散求解器,两种求解器的选择关键在于模型中是否有状态模块或是否有离散状态模块。
(1)变步长连续求解器
Simulink中的变步长求解器通过增大/减小仿真步长,通过控制局部误差实现仿真精度控制。仿真过程中,在每一时间点都要计算步长,增加了计算开销,但在仿真精度要求下可以减少仿真的步数和仿真时间。
(a)显式变步长连续求解器
显式变步长求解器主要计算无刚度系统,有一下三种。
求解器
单步计算
多步计算
精度等级
方法
ode45
×
 
Runge-Kutta,
Dormand-Prince (4,5)pair
ode23
×
 
Rung-Kutta(2,3) pair of
Bogacki & Shampine
ode113
 
×
由低到高
PECE Implementation of Adams-Bashforth-Moutlon
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)隐式变步长连续求解器
隐式变步长连续求解器用于解决刚性问题,主要有一下四种:
求解器
单步
多步
精度
等级
重置方法
最大阶次
方法
ode15s
 
×
低到中
×
×
Numerical Differentiation Formulas (NDFs)
ode23s
×
 
   
Second-order, modified Rosenbrock formula
ode23t
×
 
×
 
Trapezoidal rule using a "free" interpolant
ode23tb
×
 
×
 
TR-BDF2
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仿真过程的更多相关文章

  1. Simulink仿真入门到精通(五) Simulink模型的仿真

    5.1 模型的配置仿真 由各种模块所构建的可视化逻辑连接,只是模型的外在表现,模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着模型仿真,它在每一个 ...

  2. Simulink仿真入门到精通(三) Simulink信号

    3.1 Simulink信号概述 所谓信号,表示一种随着时间而变化的量,在时间轴上的采样时刻都对应有数值. 信号在Simulink中是相当重要的组成部分,有线(line)表示,在模型中穿针引线地将各模 ...

  3. 震荡信号Simulink仿真

    1. simulink仿真设计 震荡信号本质是调制信号,可以表示为: u(t)=A*(1+m*cos(Ωt+θ))*cos(ωt+φ)=A*cos (ωt+φ)+ A*m*cos(Ωt+θ)*cos( ...

  4. matlab之simulink仿真入门

    Matlab Simulink仿真工具的应用 ****Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包含连续系统.离散系统和混合 ...

  5. Simulink仿真入门到精通(十九) 总结回顾&自我练习

    从2019年12月27到2020年2月12日,学习了Simulink仿真及代码生成技术入门到精通,历时17天. 学习的比较粗糙,有一些地方还没理解透彻,全书梳理总结: Simulink的基础模块已基本 ...

  6. Simulink仿真入门到精通(十一) 模块的封装

    当用户编写了自定义的S函数或者使用Simulink标准库中的模块搭建子系统后,可以通过封装为其设计显示外观,追加参数对话框. 封装是构建一个以对话框为接口的交互界面的过程,它将复杂的模块逻辑关系隐藏起 ...

  7. Simulink仿真入门到精通(十) S函数

    10.1 S函数概述 S函数也称为Simulink中的系统函数,是用来描述模块的Simulink宏函数,支持M.C等多种语言.当Simulink默认的模块不能满足用户的需求时,用户可以通过S函数自己打 ...

  8. Simulink仿真入门到精通(八) M语言对Simulink模型的自动化操作及配置

    8.1 M语言控制模型的仿真 M语言与Simulink结合的方式: 在Simulink模型或模块中使用回调函数 在M语言中调用与模型相关的命令,控制模型的建立,设置模块的属性,增删信号线,以及运行模型 ...

  9. Simulink仿真入门到精通(四) Simulink子系统

    4.1 Simulink子系统详解 4.1.1 子系统概述 Simulink根据仿真特性将模块的属性分为两种:虚拟模块和非虚拟模块. 非虚拟模块在仿真过程中起到实际的作用,对其进行编辑或者增加删除操作 ...

随机推荐

  1. 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...

  2. WIN10:显示文件后缀.exe

  3. Vue 源码解读(12)—— patch

    前言 前面我们说到,当组件更新时,实例化渲染 watcher 时传递的 updateComponent 方法会被执行: const updateComponent = () => { // 执行 ...

  4. js扒代码技巧(一)

    1.确定找到自己想要的代码 2.方法内部的代码需要执行后才能调用 导出方法: //案列1 //案例1 // 函数里面的方法被赋值成变量 // 解: //将函数在方法外导出到全局变量 var hex_m ...

  5. git flow 工作流程以及常用命令

    一.分支介绍 master 也是产品分支,只有一个,一般情况下不会在这个分支上进行代码操作 develop 只有一个,新特性的开发是基于 develop 开发的,但是不能直接在 develop 上进行 ...

  6. 微信小程序授权登录将open_id传至后台并入库

    要求能把用户昵称.头像以及open_id写入数据库,服务端保持用户登录状态 wxml: <block wx:else> <button type="primary" ...

  7. Java入土---Java运行机制及IDEA的安装使用

    Java运行机制及IDEA的安装使用 java程序运行机制 计算机高级语言分为编译型语言跟解释型语言,而java同时具有两者的特点. 可能对于新手来说,什么是编译,什么是解释; 简单来说,编译就是将代 ...

  8. LGP7840题解

    给出一种新的理解方式,本质上和正解是一致的. 首先我们现在已经有了一个森林,我们现在要给他加一条边,加哪一条边是最优的呢? 假设加的边是 \((u,v)\),那么 \(((d[u]+1)^2-d[u] ...

  9. ArcGIS热点分析

    许多论文中一般会有热点分析图,ArcGIS中提供了热点分析的功能. 先看下描述:给定一组加权要素,使用 Getis-Ord Gi* 统计识别具有统计显著性的热点和冷点. 其实非常简单,今天博主就跟大家 ...

  10. JavaWeb 11_jsp九大内置对象

    1. out: 输出对象,向客户端输出内容2. request: 请求对象;存储"客户端向服务端发送的请求信息" request对象的常见方法: String getParamet ...