function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)

% SFUNTMPL 是M-文件 S函数模板

%  通过剪裁,用户可以生成自己的S函数,不过一定要重新命名

%  利用S函数可以生成连续、离散混合系统等,实现任何模块的功能

%

%  M-文件S函数的语法为:

%       [SYS,X0,STR,TS] = SFUNC(T,X,U,FLAG,P1,...,Pn)

%

%  参数含义:

%       t是当前时间

%       x是S函数相应的状态向量

%       u是模块的输入

%       flag是所要执行的任务

%

%   FLAG   结果               功能

%   -----  ------             --------------------------------------------

%   0      [SIZES,X0,STR,TS]  模块初始化

%   1      DX                 计算模块导数

%   2      DS                 更新模块离散状态

%   3      Y                  计算模块输出

%   4      TNEXT              计算下一个采样时间点

%   9      []                 结束仿真

%

%

%  用户切勿改动输出参数的顺序、名称和数目

%  输入参数的数目不能小于1,这四个参数的名称和排列顺序不能改动

%  用户可以根据自己的要求添加额外的参数,位置依次为第5,6,7,8,9等。

%  S函数的flag参数是一个标记变量,具有6个不同值,分别为0,1,2,3,4,9

%  flag的6个值分别指向6个不同的子函数

%  flag所指向的子函数也成为回调方法(Callback Methods)

switch flag,

%初始化,调用“模块初始化”子程序%

  case 0,

    [sys,x0,str,ts]=mdlInitializeSizes;

%连续状态变量计算,调用“计算模块导数”子函数%

  case 1,

    sys=mdlDerivatives(t,x,u);

%更新,调用“更新模块离散状态”子函数%

  case 2,

    sys=mdlUpdate(t,x,u);

%输出,调用“计算模块输出”子函数%

  case 3,

    sys=mdlOutputs(t,x,u);

%计算下一时刻采样点,调用“计算下一个采样时刻点”子函数%

  case 4,

    sys=mdlGetTimeOfNextVarHit(t,x,u);

%结束,调用“结束仿真”子函数%

  case 9,

    sys=mdlTerminate(t,x,u);

%其他的flag%

  otherwise

    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

% end sfuntmpl

%=============================================================================

% “模块初始化”子函数

% 返回大小、初始条件和样本

function [sys,x0,str,ts]=mdlInitializeSizes

%  调用simsizes函数,返回规范格式的sizes构架

%  这条指令不要修改

sizes = simsizes;

%  模块的连续状态个数,0是默认值

%  用户可以根据自己的要求进行修改

sizes.NumContStates  = 0;

%  模块的离散状态个数,0是默认值

%  用户可以根据自己的要求进行修改

sizes.NumDiscStates  = 0;

%  模块的输出个数,0是默认值

%  用户可以根据自己的要求进行修改

sizes.NumOutputs     = 0;

%  模块的输入个数,0是默认值

%  用户可以根据自己的要求进行修改

sizes.NumInputs      = 0;

%  模块中包含的直通前向馈路个数,1是默认值

%  用户可以根据自己的要求进行修改

sizes.DirFeedthrough = 1;

%  模块中采样时间的个数,1是默认值,至少需要一个样本时间

%  用户可以根据自己的要求进行修改

sizes.NumSampleTimes = 1;

%  初始化后的构架sizes经simsizes函数处理后向sys赋值

%  这条指令不要修改

sys = simsizes(sizes);

%  给模块初始值变量赋值,[]是默认值

%  用户可以根据自己的要求进行修改

x0  = [];

%  系统保留变量

%  切勿改动,保持为空

str = [];

%  “二元对”描述采样时间及偏移量。[0 0]是默认值

%  [0 0]适用于连续系统

%  [-1 0]则表示该模块采样时间继承其前的模块采样时间设置

ts  = [0 0];

% end mdlInitializeSizes

%=============================================================================

% 计算导数向量

function sys=mdlDerivatives(t,x,u)

%  此处填写计算导数向量的指令

%  []是模块的默认值

%  用户必须把算得的离散状态的导数向量赋给sys

sys = [];

% end mdlDerivatives

%=============================================================================

% 计算离散状态向量

function sys=mdlUpdate(t,x,u)

%  此处填写计算离散状态向量的指令

%  []是模块的默认值

%  用户必须把算得的离散状态向量赋给sys

sys = [];

% end mdlUpdate

%=============================================================================

% 计算模块输出向量

function sys=mdlOutputs(t,x,u)

%  此处填写计算模块输出向量的指令

%  []是模块的默认值

%  用户必须把算得的模块输出向量赋给sys

sys = [];

% end mdlOutputs

%=============================================================================

% 计算下一采样时刻

function sys=mdlGetTimeOfNextVarHit(t,x,u)

%  该子函数仅在“采样时间”情况下使用

%  sampleTime = 1 是模块默认设置,表示在当前时间1秒后再调用本模块

%  用户可以根据自己的要求修改

sampleTime = 1;

%  将计算得到的下一采样时刻赋给sys

%  切勿改动

sys = t + sampleTime;

% end mdlGetTimeOfNextVarHit

%=============================================================================

function sys=mdlTerminate(t,x,u)

%  模板默认设置,一般情况不要改动

sys = [];

% end mdlTerminate

Matlab中S函数建立与应用的更多相关文章

  1. matlab 中“newff” 函数的参数设置

    matlab 中"newff" 函数的使用方法技巧|和各参数的意义 先来一个简单的源程序让大家练习一下: % Here input P and targets T define a ...

  2. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  3. matlab中subplot函数的功能

    转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...

  4. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  5. matlab 中max函数用法

    Matlab中max函数在矩阵中求函数大小的实例如下:(1)C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的 ...

  6. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  7. matlab中cumsum函数

    matlab中cumsum函数通常用于计算一个数组各行的累加值.在matlab的命令窗口中输入doc cumsum或者help cumsum即可获得该函数的帮助信息. 格式一:B = cumsum(A ...

  8. 『转载』Matlab中fmincon函数获取乘子

    Matlab中fmincon函数获取乘子 一.输出结构 [x,fval,exitflag,output,lambda] = fmincon(......) 二.结构说明 lambda结构 说     ...

  9. matlab中norm函数的用法

    格式:n=norm(A,p) 功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数 以下是Matlab中help norm 的解释 NORM   Matrix or vecto ...

随机推荐

  1. break 与continue的区别

    //break是结束整个循环体,continue是结束单次循环 比方说: while(x++ < 10){ if(x == 3) { break; } printf("%d\r\n&q ...

  2. 74HC595的中文资料

    74HC595--具有三态输出锁存功能的8位串行输入.串行/并行输出移位寄存器 本文翻译自NXP的74HC595的datasheet 74HC595和74HCT595是带有存储寄存器和三态输出的8位串 ...

  3. centos 安装 erlang

    1.首先下载erlang 安装源文件 可以在官网上下载 : http://www.erlang.org/   官网上提供多个版本:   2.下载完成后将R16B01 Source File对应的 ot ...

  4. c#个性化安装包

    近来想做一个模仿QQ或猎豹浏览器那样的个性化安装包,NSIS或IS等简单看了一下,比较复杂还不确定能不能实现. 想了一下,可以自己开发一个安装包程序,新建一个windows项目,但不知如何将已开发完成 ...

  5. 关于RadUpload上传问题总结

    最近在开发上传控件,使用RadUpload上传大附件 发现了几个小问题,总结后分享给大家: 1.IE6浏览器下文件的路径显示的是物理路径,需要进行转换 2.IIS7.0 配置时要选择经典模式 3.we ...

  6. 字符串匹配算法(KMP)

    字符串匹配运用很广泛,举个简单例子,我们每天登QQ时输入账号和密码,大家有没有想过账号和密码是怎样匹配的呢?登录需要多长时间和匹配算法的效率有直接的关系. 首先理解一下前缀和后缀的概念: 给出一个问题 ...

  7. BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )

    先按时间排序( 开始结束都可以 ) , 然后 dp( i ) = max( dp( i ) , dp( j ) + 1 ) ( j < i && 节日 j 结束时间在节日 i 开 ...

  8. 投票系统前台 C#,数据库SQL

    ------------vote.aspx.cs--------------------  private void Page_Load(object sender, System.EventArgs ...

  9. python 中 json的处理

    python中的json对象,其实就是字典类型. 利用json模块,可以将字符串类型的json串转换为 json对象(字典对象),也可以将json对象(字典对象)转换为字符串对象. 代码如: #cod ...

  10. python Unable to find vcvarsall.bat 错误

    今天遇到了这个方面的问题,目前找到两种办法.一种是换编译器如mingw,另一种是装vc.第一种方法没成功,现在正在等第二种. 第一种: 首先安装MinGW: 把MinGW的路径添加到环境变量path中 ...