- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
S函数学习笔记
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函数文件名要与函数名一致。
函数体
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys = mdlDerivatives(t,x,u);
case 2
sys = mdlUpdates(t,x,u);
case 3
sys = mdlOutputs(t,x,u);
case 4
sys = mdlGetTimeOfNextVarHit(t,x,u);
case 9
sys=mdlGetTimeOfNextVarHit(t,x,u);
说明
对于特定的算法可能只用到某些flag状态的操作,对于不需要操作的flag状态,有两种处理方式,一种是在主函数中处理,另一种是在定义子函数时处理。以不需要进行flag为1、4和9状态时的操作为例分别进行说明。
在主函数中处理
在主函数中编写为:
case {1,2,9}
sys = [];
这样处理就不需要再编写对应状态的子函数。
在子函数中处理
在主函数中编写为:
case 1
sys = mdlDerivatives(t,x,u);
case 4
sys = mdlGetTimeOfNextVarHit(t,x,u);
case 9
sys=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的性质可以将算法分为三大类:基于连续状态变量的算法、基于离散状态变量的算法和不基于状态变量的算法。接下来分别介绍这三种类型的算法设计。
基于连续状态变量的算法
算法的整体设计思想是:?=f1(t,x,u) y=f2(t,x,u)
初始化(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] = mdlInitializeSizes
sizes = 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];
/***************************************************/
状态变量求导(flag=1)
子函数mdlDerivatives实现连续状态变量x导数的表达式:f1(t,x,u),用系统变量sys记录并传递给?。在函数体中也可以编写其它操作,但是sys只返回给?。
示例:
/***************************************************/
function sys =
您可能关注的文档
- 2014 中考复习专项[谓语动词八大时态.doc
- 测速传感器..doc
- 2014年秋季学期结构设计方法考试试题.docx
- material studio详细介绍.doc
- 《分离工程》试卷1.doc
- 测量不确定度评定实例..doc
- 专升本英语时态语态和情态动词详讲.doc
- 关于电路状态变化的习题.doc
- 凸模型地震荷载作用下的建筑结构与控制协同优化.doc
- 测量专项施工方案..doc
- 2022~2023电梯考试考试题库及满分答案365 .pdf
- 2023-2024学年上学期小学语文人教部编版六年级同步经典题精练之第七完整版720765008.pdf
- 2022年4月高等教育自学考试全国统一命题考试管理经济学试题及答案-(1.pdf
- 2023-2024学年贵州省都匀市杨柳街中学九年级上学期道德与法治第一次.pdf
- 2022~2023广播电视播音员主持人考试题库及答案第305期 .pdf
- 2021年上半年教师资格考试幼儿园《保教知识与能力》真题及答案.pdf
- 2022-2023学年全国初中七年级上数学人教版期末试卷(含答案解析)005247完整版720736.pdf
- 2023-2024学年福建省宁德第一中学高一上学期开学考试物理试卷含详解.pdf
- 2023-2024学年北京市丰台区第二中学中考英语模拟预测题含答案.pdf
- 2023年陕西高考志愿填报指南(附填报时间填报入口) .pdf
文档评论(0)