⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m05_lisanxitong.m

📁 MATLAB仿真技术与实例应用教程
💻 M
字号:
 function [sys,x0,str,ts] = m05_lisanxitong(t,x,u,flag)
%定义离散系统的S函数例子 
%此S函数遵循下面的方程: 
%    x(n+1) = Ax(n) + Bu(n)
%    y(n)   = Cx(n) + Du(n)
%   
%   See sfuntmpl.m for a general S-function template.
%
% 生成离散线性系统
A=[-1   -0.05
    1     0];
B=[1     -6
   0     -2];
C=[ 0    2
    1    0];
D=[-2    0
    2     0];

switch flag,

  %%%%%%%%%%%%%%%%%%
  % Initialization ——初始化%
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D);

  %%%%%%%%%%
  % Update ——提升离散状态%
  %%%%%%%%%%
  case 2,                                                
    sys = mdlUpdate(t,x,u,A,B,C,D); 

  %%%%%%%%%%
  % Output ———计算输出%
  %%%%%%%%%%
  case 3,                                                
    sys = mdlOutputs(t,x,u,A,C,D);

  %%%%%%%%%%%%%
  % Terminate ——终止%
  %%%%%%%%%%%%%
  case 9,                                                
    sys = []; % do nothing

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags——无用标示 %
  %%%%%%%%%%%%%%%%%%%%
  otherwise
    error(['unhandled flag = ',num2str(flag)]);
end

%end m05_lisanxitong    自定义子函数结束

%以下是各子函数模块
%=======================================================================
% mdlInitializeSizes——初始化子函数
% Return the sizes, initial conditions, and sample times for the S-function.
%=======================================================================
%
function [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D)   

sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = size(A,1);
sizes.NumOutputs     = size(D,1);
sizes.NumInputs      = size(D,2);
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;

sys = simsizes(sizes);

x0  = ones(sizes.NumDiscStates,1);
str = [];
ts  = [1 0]; 

% end mdlInitializeSizes

%
%===============================================================
% mdlUpdate————提升离散状态子函数
% Handle discrete state updates, sample time hits, and major time step
% requirements.
%===============================================================
%
function sys = mdlUpdate(t,x,u,A,B,C,D)

sys = A*x+B*u;

%end mdlUpdate

%
%===============================================================
% mdlOutputs ———计算输出子函数
% Return the output vector for the S-function
%===============================================================
%
function sys = mdlOutputs(t,x,u,A,C,D)

sys = C*x+D*u;

%end mdlOutputs

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -