📄 ch2example16sfun.m
字号:
function [sys,x0,str,ts] =ch2example16Sfun(t,x,u,flag)
% 连续系统状态方程;
% x'=Ax+Bu
% y =Cx+Du
% 定义A,B,C,D矩阵
A=[0 1 0;0 0 1;-4 -6 -3];
B=[0;0;1];
C=[0 4 0];
D=0;
switch flag,
case 0 % flag=0 初始化
[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);
% 可将A,B,C,D矩阵送入初始化函数
case 1 % flag=1 计算连续系统状态方程(导数)
sys=mdlDerivatives(t,x,u,A,B,C,D);
case 3 % flag=3 计算输出
sys=mdlOutputs(t,x,u,A,B,C,D);
case { 2, 4, 9 } % 其他作不处理的flag
sys=[]; % 无用的flag时返回sys为空矩阵
otherwise % 异常处理
error(['Unhandled flag = ',num2str(flag)]);
end
% 主函数结束
% 子函数实现(1)初始化函数----------------------------------
function [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D) %
sizes = simsizes; % 获取
sizes.NumContStates = 3; % 连续系统的状态数为3
sizes.NumDiscStates = 0; % 离散系统的状态数,对于本系统此句可不用
sizes.NumOutputs = 1; % 输出信号数目是1
sizes.NumInputs = 1; % 输入信号数目是1
sizes.DirFeedthrough = 0; % 因为该系统不是直通的
sizes.NumSampleTimes = 1; % 这里必须为1
sys = simsizes(sizes);
str = []; % 通常为空矩阵
x0 = [0;0;0]; % 初始状态矩阵x0 (零状态情况)
ts = [0 0]; % 表示连续取样时间的仿真
% 初始化函数结束
% 子函数实现(2)系统状态方程函数-----------------------------
function sys=mdlDerivatives(t,x,u,A,B,C,D) % 系统状态方程函数
sys = A*x+B*u ; % 这里写入系统的状态方程矩阵形式即可
% 系统状态函数结束
% 子函数实现(3)系统输出方程函数-----------------------------
function sys = mdlOutputs(t,x,u,A,B,C,D)
sys = C*x; % 这里写入系统的输出方程矩阵形式即可
% 注意,如果使用语句sys = C*x+D*u ;代替上句,即使D=0,
% 也要将初始化函数中的sizes.DirFeedthrough 设为1
% 即系统存在输入输出之间的直通项, 否则执行将出现错误
% 系统输出方程函数结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -