%对应的系统传函为G=1/(s+1),状态空间方程为:dx=-x+u;y=x
%注意:x_initial是状态变量x的初始值,需要在simulink对系统进行仿真前由用户在工作空间手工赋值
function [sys,x0,str,ts] = sfun_1(t,x,u,flag,x_initial)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(x_initial);%初始化子函数
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);%仿真结束子函数
otherwise
error(['Unhandled flag = ',num2str(flag)]);%出错标记
end
%以下为初始化子函数
function [sys,x0,str,ts]=mdlInitializeSizes(x_initial)
sizes = simsizes;%用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 1;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 0;%“0”表示:输入和输出间不存在直接比例关系
sizes.NumSampleTimes = 1; %
sys = simsizes(sizes);%设置完后,赋给sys输出
x0 = x_initial;%状态变量初始值
str = [];%固定格式
ts = [0 0];%该取值对应纯连续系统
%以下为计算模块导数子函数
function sys=mdlDerivatives(t,x,u)
dx=-x+u;%对应于该系统的状态空间方程
sys = dx;%把计算得出的导数向量赋给sys输出
%以下为更新模块离散状态子函数
function sys=mdlUpdate(t,x,u)
sys = [];
%以下为计算模块输出子函数
function sys=mdlOutputs(t,x,u)
sys = x;%对应于该系统的状态空间方程
%以下为计算下一个采样时间点子函数
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; % Example, set the next hit to be one second later.
sys = t + sampleTime;
%以下为仿真结束子函数
function sys=mdlTerminate(t,x,u)
sys = [];
- 1
- 2
- 3
- 4
前往页