S函数学习笔记.doc_第1页
S函数学习笔记.doc_第2页
S函数学习笔记.doc_第3页
S函数学习笔记.doc_第4页
S函数学习笔记.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

S函数用于自定义实现特定的算法,然后嵌入到simulink模块“S-Function”中用于仿真。一、主函数1、函数头:function sys,x0,str,ts=functionname(t,x,u,flag,p1,p2,p3.)1 sys,x0,str,ts为系统默认输出变量;2 t,x,u,flag为系统默认输入参数;3 p1,p2,p3.为用户可选输入变量;(如果定义函数时列表中有可选输入参数,在S-Function模块中要设置参数的值)4 s函数文件名要与函数名一致。2、 函数体switch flagcase 0sys,x0,str,ts=mdlInitializeSizes;case 1sys = mdlDerivatives(t,x,u);case 2sys = mdlUpdates(t,x,u);case 3sys = mdlOutputs(t,x,u);case 4sys = mdlGetTimeOfNextVarHit(t,x,u);case 9sys=mdlGetTimeOfNextVarHit(t,x,u);3、 说明对于特定的算法可能只用到某些flag状态的操作,对于不需要操作的flag状态,有两种处理方式,一种是在主函数中处理,另一种是在定义子函数时处理。以不需要进行flag为1、4和9状态时的操作为例分别进行说明。1 在主函数中处理在主函数中编写为:case 1,2,9 sys = ; 这样处理就不需要再编写对应状态的子函数。2 在子函数中处理在主函数中编写为:case 1sys = mdlDerivatives(t,x,u);case 4sys = mdlGetTimeOfNextVarHit(t,x,u);case 9sys=mdlGetTimeOfNextVarHit(t,x,u);在子函数中编写为:function sys = mdlUpdates(t,x,u)sys = ;function sys = mdlGetTimeOfNextVarHit(t,x,u)sys = ;function sys=mdlTerminate(t,x,u) sys = ;二、子函数算法的设计可能会用到状态变量x,那么根据x的性质可以将算法分为三大类:基于连续状态变量的算法、基于离散状态变量的算法和不基于状态变量的算法。接下来分别介绍这三种类型的算法设计。1、 基于连续状态变量的算法算法的整体设计思想是:=f1(t,x,u) y=f2(t,x,u)1 初始化(flag=0)设置使用的连续状态变量的个数:size.NumContStates = 设置不使用离散状态变量:size.NumDiscStates = 0设置输出变量的个数:size.NumOutputs = 设置输入变量的个数:size.NumInputs = 设置输出变量与输入变量是否相关:size.DirFeedthrough = 1或0设置采样时间的个数:size.NumSampleTimes = 用系统变量sys记录并返回上述设置:sys=simsize(sizes)设置状态变量的初始值:x0 = .设置保留变量str为空:str = 设置采样时间类型:ts = .示例:/*/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 = 0 0;/*/2 状态变量求导(flag=1)子函数mdlDerivatives实现连续状态变量x导数的表达式:f1(t,x,u),用系统变量sys记录并传递给。在函数体中也可以编写其它操作,但是sys只返回给。示例:/*/function sys = mdlDerivatives(t,x,u,A,B,C,D)sys = A*x + B*u;/*/3 状态变量更新(flag=2)子函数mdlUpdates实现离散状态变量x的更新,因此在基于连续状态变量的算法中不需要这一步运算。4 输出变量计算(flag=3)子函数mdlOutputs实现输出变量y的表达式:f2(t,x,u),用系统变量sys记录并传递给y。在函数体中也可以编写其它操作,但是sys只返回给y。示例:/*/function sys = mdlOutputs( t,x,u,A,B,C,D )sys = A*x + B*u;/*/5 采样时刻计算(flag=4)子函数mdlGetTimeOfNextVarHit计算下一次采样时刻,只在离散采样系统中有用(即mdlInitializeSizes中的ts设置ts(1)不为0)。示例:/*/function sys = mdlGetTimeOfNextVarHit( t,x,u )sys = t + u(2);/*/6 Simulink仿真结束时的操作(flag=9)编写simulink仿真结束时刻进行的操作,用sys记录返回值,但是返回值传递给哪个变量不详,一般置sys=。示例:/*/function sys=mdlTerminate(t,x,u) sys = ;/*/2、 基于离散状态变量的算法算法的整体设计思想是:x(n+1)=f1(t,x,u) y(n)=f2(t,x,u)1 初始化(flag=0)设置不使用连续状态变量:size.NumContStates = 0设置使用的离散状态变量的个数:size.NumDiscStates = 设置输出变量的个数:size.NumOutputs = 设置输入变量的个数:size.NumInputs = 设置输出变量与输入变量是否相关:size.DirFeedthrough = 1或0设置采样时间的个数:size.NumSampleTimes = 用系统变量sys记录并返回上述设置:sys=simsize(sizes)设置状态变量的初始值:x0 = .设置保留变量str为空:str = 设置采样时间类型:ts = .示例:/*/function sys,x0,str,ts = mdlInitializeSizessizes = simsizes;sizes.NumContStates = 0;sizes.NumDiscStates = 2;sizes.NumOutputs = 2;sizes.NumInputs = 2;sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0 = zeros(2,1);str = ;ts = 0 0;/*/2 状态变量求导(flag=1)子函数mdlDerivatives实现连续状态变量x的更新,计算f1(t,x,u),用系统变量sys记录并传递给。因此在基于离散状态变量的算法中不需要这一步运算。3 状态变量更新(flag=2)子函数mdlUpdates实现离散状态变量x导数的表达式:f1(t,x,u),用系统变量sys记录并传递给x(n+1)。在函数体中也可以编写其它操作,但是sys只返回给x(n+1)。示例:/*/function sys = mdlUpdates(t,x,u,A,B,C,D)sys = A*x + B*u;/*/4 输出变量计算(flag=3)子函数mdlOutputs实现输出变量y的表达式:f2(t,x,u),用系统变量sys记录并传递给y。在函数体中也可以编写其它操作,但是sys只返回给y。示例:/*/function sys = mdlUpdates( t,x,u,A,B,C,D )sys = A*x + B*u;/*/5 采样时刻计算(flag=4)子函数mdlGetTimeOfNextVarHit计算下一次采样时刻,只在离散采样系统中有用(即mdlInitializeSizes中的ts设置ts(1)不为0)。示例:/*/function sys = mdlGetTimeOfNextVarHit( t,x,u )sy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论