1、x(n+1) = u(n);
y(n) = x(n); 延迟
首先还是直接复制sfuntmpl里的模板,新建一个.m文件。给他命名,这里一般函数名和文件名是一致的。
function [sys,x0,str,ts,simStateCompliance] = secon(t,x,u,flag)
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=mdlDerivatives(t,x,u);
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
sys=mdlUpdate(t,x,u);
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=mdlOutputs(t,x,u);
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit %
%%%%%%%%%%%%%%%%%%%%%%%
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%%%%%%%%%%%%%
% Terminate %
%%%%%%%%%%%%%
case 9,
sys=mdlTerminate(t,x,u);
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 1;
sizes.NumOutputs = 1;%一个输出
sizes.NumInputs = 1;%一个输入
sizes.DirFeedthrough = 0;%u和y是否有直接关系,是则为1,否则为0
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
%
% initialize the initial conditions
%
x0 = 2;%此时初始值要设置
%
% str is always an empty matrix
%
str = [];
%
% initialize the array of sample times
%
ts = [0.5 0];%在0.5秒的时候偏移量是0
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes
function sys=mdlDerivatives(t,x,u)
sys = [];
% end mdlDerivatives
function sys=mdlUpdate(t,x,u)
sys = u;%sys就是下一个状态
% end mdlUpdate
function sys=mdlOutputs(t,x,u)
sys = x;
% end mdlOutputs
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 = [];
% end mdlTerminate
打开Simulink建立如下模块:
波形显示:
从图形可以看出,向后延迟了0.5秒。
2、dx = u;
y = x;
function [sys,x0,str,ts,simStateCompliance] = threee(t,x,u,flag)
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%%%%%%%%%%%%%%%
% Derivatives %
%%%%%%%%%%%%%%%
case 1,
sys=mdlDerivatives(t,x,u);
%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,
sys=mdlUpdate(t,x,u);
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
case 3,
sys=mdlOutputs(t,x,u);
%%%%%%%%%%%%%%%%%%%%%%%
% GetTimeOfNextVarHit %
%%%%%%%%%%%%%%%%%%%%%%%
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%%%%%%%%%%%%%
% Terminate %
%%%%%%%%%%%%%
case 9,
sys=mdlTerminate(t,x,u);
%%%%%%%%%%%%%%%%%%%%
% Unexpected flags %
%%%%%%%%%%%%%%%%%%%%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%
sizes = simsizes;
sizes.NumContStates = 1;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;%一个输出
sizes.NumInputs = 1;%一个输入
sizes.DirFeedthrough = 1;%u和y是否有直接关系,是则为1,否则为0
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
%
% initialize the initial conditions
%
x0 = 0;%此时初始值要设置
%
% str is always an empty matrix
%
str = [];
%
% initialize the array of sample times
%
ts = [0 0];%在0.5秒的时候偏移量是0
simStateCompliance = 'UnknownSimState';
% end mdlInitializeSizes
function sys=mdlDerivatives(t,x,u)
sys = u;%x的导数等于u
% end mdlDerivatives
function sys=mdlUpdate(t,x,u)
sys = [];%sys就是下一个状态
% end mdlUpdate
function sys=mdlOutputs(t,x,u)
sys = x;
% end mdlOutputs
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 = [];
% end mdlTerminate
同样搭建SIMULINK
图像: