打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Matlab/Simulink建模详解:一阶时变方程式的求解

        Matlab是工程界用的最广泛的软件之一了,Matlab是Matrix Laboratory的合成词,顾名思义,它应该比较擅长处理矩阵运算。今天小编带大家来学习一下Matlab里面的一个强大的工具:Simulink。这期的内容和难度属于Simulink里面的中级,没有接触过Simulink的同学需要事先稍微了解一下Simulink,再回过来看这一期文章。日笃小编在三年前接触Simulink,过去三年里面主要利用Simulink模块搭建汽车尾气高温热能回收发电的系统,主要用Simulink来求解每个组件里面的方程。先是单独的组件(热交换器、涡轮发电机、水泵、阀门、可压缩理想气体、转接头)进行Simulink建模,每个组件都有自己的方程式,单个组件建模完毕以后需要用试验数据校准里面的参数;接下来就是把各个组件放在一个Simulink文件里面连接起来,然后做整体的模拟调试,整体能够正常运行以后,就做整体的试验数据校准。校准完毕以后就是整体模拟的验证。

 

        日笃小编个人经历来看,这里面最难的部分之一就是单个组件建模过程中的方程式求解。独立变量一般多为时间,有的系统空间也是独立变量,仅仅是时间作为独立变量的方程成为ODE(Ordinary Differential Equation),如果在时间作为独立变量的基础上,空间也作为独立变量,这样的方程通常称为PDE(Partial Differential Equation)。求解ODE的过程实际上是一个积分的过程,因为一个变量对时间的n次导数,积分n次后就能够得到那个变量。求解PDE的时候,一般人们会先把它转化为ODE,然后按照普通求解ODE的方法求解。


ODE 例子:


PDE 例子:



        下面用一个具体的实例还求解ODE,假设有一根空心钢管,钢管里面充满着理想气体,进出口有两个空气泵用来控制进出口理想气体的流量,假设时间t=0s的时候钢管内理想气体质量为1kg,接下来的10秒内,进气泵以恒定的流速0.01kg/s向钢管内输送,而出气泵以恒定的流速0.009kg/s从钢管内抽取气体,求解空心管内的理想气体质量随时间变化的关系。 首先根据质量守恒列出关系式:


Simulink建模如下:



结果如下:



        可以看到钢管内理想气体的质量随着时间的增长,从一开始的1kg,上升到10s后的1.1kg。需要注意的是每次用到Simulink里面的积分模块的时候,双击那个模块,里面需要定义一个初始值,默认的初始值为0。 当然有一些状态的量可以从零开始,比如车速,完全放空电量的电池SOC (State of Charge),发动机扭矩等等。但大部分状态量是不能为零的,不然就失去了它本身的物理意义,比如说火箭发射前的质量,启动情况下的发动机进气量,全新电池的SOH(State of Health)等等。


        下面我们来做一个稍微复杂一点的例子:计算这根钢管里面压力的变化

首先我们先找到对应的方程式,除了需要上面的质量守恒的方程式以外,我们再加入一个能量守恒以及一个理想气体的状态方程,引入温度和压力这两个时间变化的量,这样的话我们就有三个方程式,三个时间变化的参数(m,T,p)分别是钢管内气体质量、温度和压力(读者不需要知道关系式怎么来的,只需要关注这里有三个方程式,三个未知数就行了)

质量守恒:

能量守恒:

理想气体状态方程:



Simulink整体建模如下:


        这个Simulink实际上就是上面三个方程式的求解,可以通过识别里面的三个积分器的位置来区分这三个方程式,下面一部分一部分来讲解:

质量守恒:


能量守恒:


对上述关系式稍作变形后,我们可以得到:



理想气体状态方程:

稍微变动一下等式左右两边的项,我们就可以得到:




        设定时间t=0s的时候的压力为大气压p=1e5Pa。钢管的体积为5L,时间从0变化到10s的过程中的压力变化曲线为:


        讲完了两个方程式求解的Simulink建模的例子,下面日笃小编给大家讲讲当不同组件连接在一起的时候,如何协调这个系统的模型,让整个系统正常的运行模拟而没有错误。协调Simulink系统模型最关键的是“因果关系”,所谓因果关系,就是单个组件之间求解,必须要按照一定的先后顺序,上一个组件的输出是下一个组件的输入(偶尔也会有下一个组件的部分输出作为上一个组件的输入)。对于整体系统里面存在的多个随时间变化的参数(指通过积分器求解出来的时变参数),在整体系统协调纠错的时候,在参数之后需要添加额外的迟滞单元或者简单的滤波器。这样能够让组件之间的数值计算先后顺序更加明显,增加整个系统模型运行的稳定性的同时,又不会对系统的模拟精度造成很大的影响。另外一个对于系统模型运行稳定性比较重要的是,对一些不太稳定的参数设置饱和值(Simulink里面的Saturation模块),有了这个模块,即使某个参数的数值计算结果出现了异常情况,也能保证它的数值输出在一个可以接受的范围内,这样的话不会因为这个参数数值结果的异常,而很大的影响到系统其它组件的模拟计算。一般来讲,如果系统足够稳定,异常的参数应该能够在很短的时间内恢复正常,如果该参数长时间处于饱和的位置,那么可能就需要仔细排查原因。


        这次的Simulink建模就为大家介绍到这里,如果对于Simulink或者Matlab其他功能有什么需求,或者想了解更多的Simulink特定方面的一些功能,欢迎在底下留言,日笃小编会针对读者的需求出文章。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Matlab学习】Simulink建模与仿真
MathWorks 发布包含 MATLAB 和 Simulink 产品系列的 2016a 版本
让我们利用DSP Builder创建一个中值滤波模块(原创)
什么是数字孪生?
MATLAB Simulink和Stateflow的控制算法建模指南-MAB 5.0 1-100页(MAAB)
SIMULINK仿真的运行-电子电路图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服