?? han_td.m
字號:
function [sys,x0,str,ts]=han_td(t,x,u,flag,r,h,T)
switch flag,
case 0 % 調用初始化函數(shù)
[sys,x0,str,ts] = mdlInitializeSizes(T);
case 2 % 調用離散狀態(tài)的更新函數(shù)
sys = mdlUpdates(x,u,r,h,T);
case 3 % 調用輸出量的計算函數(shù)
sys = mdlOutputs(x);
case {1, 4, 9} % 未使用的 flag 值
sys = [];
otherwise % 處理錯誤
error(['Unhandled flag = ',num2str(flag)]);
end;
% 當 flag 為 0 時進行整個系統(tǒng)的初始化
function [sys,x0,str,ts] = mdlInitializeSizes(T)
% 首先調用 simsizes 函數(shù)得出系統(tǒng)規(guī)模參數(shù) sizes, 并根據(jù)離散系統(tǒng)的
% 實際情況設置 sizes 變量
sizes = simsizes; % 讀入初始化參數(shù)模板
sizes.NumContStates = 0; % 無連續(xù)狀態(tài)
sizes.NumDiscStates = 2; % 有兩個離散狀態(tài)
sizes.NumOutputs = 2;% 輸出兩個量:跟蹤信號和微分信號
sizes.NumInputs = 1; % 系統(tǒng)輸入信號一路
sizes.DirFeedthrough = 0; % 輸入不直接傳到輸出口
sizes.NumSampleTimes = 1; % 單個采樣周期
sys = simsizes(sizes); % 根據(jù)上面的設置設定系統(tǒng)初始化參數(shù)
x0 = [0; 0]; % 設置初始狀態(tài)為零狀態(tài)
str = [];% 將 str 變量設置為空字符串即可
ts = [T 0]; % 采樣周期,若寫成 -1 則表示繼承其輸入信號
% 在主函數(shù)的 flag=2 時,更新離散系統(tǒng)的狀態(tài)變量
function sys = mdlUpdates(x,u,r,h,T)
sys(1,1)=x(1)+T*x(2);
sys(2,1)=x(2)+T*fst2(x,u,r,h);
% 在主函數(shù) flag=3 時,計算系統(tǒng)的輸出變量:返回兩個狀態(tài)
function sys = mdlOutputs(x)
sys=x;
% 用戶定義的子函數(shù): fst2
function f=fst2(x,u,r,h)
delta=r*h; delta0=delta*h; y=x(1)-u+h*x(2);
a0=sqrt(delta*delta+8*r*abs(y));
if abs(y)<=delta0
a=x(2)+y/h;
else
a=x(2)+0.5*(a0-delta)*sign(y);
end
if abs(a)<=delta, f=-r*a/delta; else, f=-r*sign(a); end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -