MATLAB S 函数编写示范(基于 MATLABR2010a)
1.M 语言 S 函数
在命令行输入命令“edit sfuntmpl”即可打开 M 语言 s 函数模板。M 语
言 S 函数是以 flag 为标志进行运算的。flag==0 时,初始化参数;flag==1 时,
计算微 分;flag==2 时,状态更新;flag==3 时,计算输出;flag==4 时适用于
变步长结算;其他参数不常用。
(1)flag==0 时,调用 mdlInitializeSizes 函数,sizes 结构及解释如
下:
sizes.NumContStates = 0; //连续变量个数
sizes.NumDiscStates = 0; //离散变量个数
sizes.NumOutputs = 0; //输出个数
sizes.NumInputs = 0; //输入个数
sizes.DirFeedthrough = 1; //是否直通,当在输出
里包含了输入时,为直通
sizes.NumSampleTimes = 1; //采样时间
对状态变量进行初始化,如果初始条件是 0 初始条件,
则
x0=[0 0]
(2)flag==1 时,调用 mdlDerivatives(t,x,u)函数计算微分,如有一
系统为状态方程为 x'=2x+u,y=5x+u 时,编写如下:sys=2*x+u;
(3)flag==3 时,计算输出,如上例系统,则编写如下:sys=5*x+u;
ok,下面只需要将编写好的 s 函数名称写入 s-function 模块。
例子:对如下系统(零初始条件)
x1'=-3x1-x2+u;
x2'=2x1;
y=x2;编写 s 函数如下:
function [sys,x0,str,ts,simStateCompliance] = sfun_m_hyj(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
case 1,