S函数学习笔记

S函数学习笔记

ID:42271428

大小:64.01 KB

页数:5页

时间:2019-09-11

S函数学习笔记_第1页
S函数学习笔记_第2页
S函数学习笔记_第3页
S函数学习笔记_第4页
S函数学习笔记_第5页
资源描述:

《S函数学习笔记》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、S函数用于自定义实现特定的算法,然后嵌入到simulink模块“S-Function”中用于仿真。一、主函数1、函数头:function[sys,x0,str,ts]=functionname(t,x,u,flag,p1,p2,p3...)① sys,x0,str,ts为系统默认输出变量;② t,x,u,flag为系统默认输入参数;③ p1,p2,p3...为用户可选输入变量;(如果定义函数时列表中有可选输入参数,在S-Function模块中要设置参数的值)④ s函数文件名要与函数名一致。2、函数体switchflagcase0[sys,

2、x0,str,ts]=mdlInitializeSizes;case1sys=mdlDerivatives(t,x,u);case2sys=mdlUpdates(t,x,u);case3sys=mdlOutputs(t,x,u);case4sys=mdlGetTimeOfNextVarHit(t,x,u);case9sys=mdlGetTimeOfNextVarHit(t,x,u);3、说明对于特定的算法可能只用到某些flag状态的操作,对于不需要操作的flag状态,有两种处理方式,一种是在主函数中处理,另一种是在定义子函数时处理。以不需

3、要进行flag为1、4和9状态时的操作为例分别进行说明。① 在主函数中处理在主函数中编写为:case{1,2,9}sys=[];这样处理就不需要再编写对应状态的子函数。② 在子函数中处理在主函数中编写为:case1sys=mdlDerivatives(t,x,u);case4sys=mdlGetTimeOfNextVarHit(t,x,u);case9sys=mdlGetTimeOfNextVarHit(t,x,u);在子函数中编写为:functionsys=mdlUpdates(t,x,u)sys=[];functionsys=mdlG

4、etTimeOfNextVarHit(t,x,u)sys=[];functionsys=mdlTerminate(t,x,u)sys=[];二、子函数算法的设计可能会用到状态变量x,那么根据x的性质可以将算法分为三大类:基于连续状态变量的算法、基于离散状态变量的算法和不基于状态变量的算法。接下来分别介绍这三种类型的算法设计。1、基于连续状态变量的算法算法的整体设计思想是:ẋ=f1(t,x,u)y=f2(t,x,u)① 初始化(flag=0)设置使用的连续状态变量的个数:size.NumContStates=□设置不使用离散状态变量:siz

5、e.NumDiscStates=0设置输出变量的个数:size.NumOutputs=□设置输入变量的个数:size.NumInputs=□设置输出变量与输入变量是否相关:size.DirFeedthrough=1或0设置采样时间的个数:size.NumSampleTimes=□用系统变量sys记录并返回上述设置:sys=simsize(sizes)设置状态变量的初始值:x0=[□□□...]设置保留变量str为空:str=[]设置采样时间类型:ts=[□□...]示例:/*********************************

6、******************/function[sys,x0,str,ts]=mdlInitializeSizessizes=simsizes;sizes.NumContStates=2;sizes.NumDiscStates=0;sizes.NumOutputs=2;sizes.NumInputs=2;sizes.DirFeedthrough=1;sizes.NumSampleTimes=1;sys=simsizes(sizes);x0=zeros(2,1);str=[];ts=[00];/*******************

7、********************************/② 状态变量求导(flag=1)子函数mdlDerivatives实现连续状态变量x导数的表达式:f1(t,x,u),用系统变量sys记录并传递给ẋ。在函数体中也可以编写其它操作,但是sys只返回给ẋ。示例:/***************************************************/functionsys=mdlDerivatives(t,x,u,A,B,C,D)sys=A*x+B*u;/****************************

8、***********************/① 状态变量更新(flag=2)子函数mdlUpdates实现离散状态变量x的更新,因此在基于连续状态变量的算法中不需要这一步运算。② 输出变量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。