📄 ninestate.m
字号:
%参数e0和de0是设定的相平面误差允许范围。
function [sys,x0,str,ts] = mfile(t,x,u,flag,e0,de0)
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
% Initialize the states, sample times, and state ordering strings.
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
%%%%%%%%%%%
% Outputs %
%%%%%%%%%%%
% Return the outputs of the S-function block.
case 3
sys=mdlOutputs(t,x,u,e0,de0);
%%%%%%%%%%%%%%%%%%%
% Unhandled flags %
%%%%%%%%%%%%%%%%%%%
% There are no termination tasks (flag=9) to be handled.
% Also, there are no continuous or discrete states,
% so flags 1,2, and 4 are not used, so return an emptyu
% matrix
case { 1, 2, 4, 9 }
sys=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Unexpected flags (error handling)%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Return an error message for unhandled flag values.
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
% end timestwo
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts] = mdlInitializeSizes()
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1; % dynamically sized
sizes.NumInputs = 2; % dynamically sized
sizes.DirFeedthrough = 1; % has direct feedthrough
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
str = [];
x0 = [];
ts = [-1 0]; % inherited sample time
% end mdlInitializeSizes
%
%=============================================================================
% mdlOutputs
% Return the output vector for the S-function
%=============================================================================
%u(1,1)为输入控制量e
%u(2,1)为输入控制量de
function sys = mdlOutputs(t,x,u,e0,de0)
if (u(1,1)>=e0 & u(2,1)>=de0)
sys=20;
elseif (u(1,1)>=e0 & abs(u(2,1))<de0)
sys=4;
elseif (u(1,1)>=e0 & u(2,1)<=-de0)
sys=2;
elseif abs((u(1,1))<e0 & u(2,1)>=de0)
sys=1;
elseif abs(u(1,1))<e0 & abs(u(2,1))<de0
sys=0;
elseif abs(u(1,1))<e0 & u(2,1)<-de0
sys=-1;
elseif (u(1,1)<=-e0 & u(2,1)>=de0)
sys=-2;
elseif (u(1,1)<=-e0 &abs(u(2,1))<de0)
sys=-4;
elseif (u(1,1)<=-e0 & u(2,1)<-de0)
sys=-20;
else
error(['my error ']);
end
% end mdlOutputs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -