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

📄 ch2example15sfun.m

📁 通信程序源代码和模型通信程序源代码和模型通信程序源代码和模型
💻 M
字号:
function [sys,x0,str,ts] =ch2example15Sfun(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 + -