Simulink里的S函数介绍(Matlab-1)
在simulink中,S-函數(shù)是系統(tǒng)函數(shù)(System Function)的簡稱,S函數(shù)是一種非常有用的一個(gè)模塊,經(jīng)常用來描述控制算法,模型方程,是一個(gè)比較常見的模塊。
S函數(shù)包括一個(gè)主函數(shù),主函數(shù)里面有三個(gè)子函數(shù),主函數(shù)一般都是如下形式:
function [sys,x0,str,ts] =fun(t,x,u,flag)
switch flag,
case 0,
??? [sys,x0,str,ts]=mdlInitializeSizes;
case 1,
??? sys=mdlDerivatives(t,x,u);
case 3,
??? sys=mdlOutputs(t,x,u);
case {2, 4, 9 }
??? sys = [];
otherwise
??? error(['Unhandled flag = ',num2str(flag)]);
end
而子函數(shù)包括:模型初始化 Initialization函數(shù);微分函數(shù)描述的mdlDerivative函數(shù);mdlOutput輸出函數(shù)。
以一個(gè)簡單的二階系統(tǒng)為例:
?也可以寫成狀態(tài)方程表達(dá)式:
?
?
使用S函數(shù)對該系統(tǒng)進(jìn)行描述,輸入為u,輸出為速度和位移,假設(shè)初始位置和速度均為0;
1.Initialization函數(shù):
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes; % 生成 sizes 數(shù)據(jù)結(jié)構(gòu)
sizes.NumContStates = 2; % 連續(xù)狀態(tài)數(shù),缺省則為 0,倆個(gè)狀態(tài)為速度和位移。
sizes.NumDiscStates = 0; % 離散狀態(tài)數(shù),缺省則為 0
sizes.NumOutputs = 2; % 輸出量個(gè)數(shù),缺省則為 0,倆個(gè)輸出為速度和位移。
sizes.NumInputs = 1; % 輸入量個(gè)數(shù),缺省則為 0,輸入為u
sizes.DirFeedthrough =0; % 有無直接饋入,有取 1,無取 0,缺省為 1。表示輸入信號是否直接在輸出端出現(xiàn)。
sizes.NumSampleTimes = 1; % 連續(xù)采樣時(shí)間
sys = simsizes(sizes); % 返回 sizes 數(shù)據(jù)結(jié)構(gòu)所包含的信息
x0 = [0,0]; %初始狀態(tài)的值,初始為0.
str = []; % 保留變量,可以忽略
ts = [0 0]; % 采樣時(shí)間:[采樣周期 偏移量],取 0 則表示為連續(xù)系統(tǒng)
2.mdlDerivatives函數(shù):
function sys=mdlDerivatives(t,x,u)
m= 3; %設(shè)置m
dt = sin(t); %設(shè)置d(t)
ut = u(1); %輸入u;
sys(1)= x(2);
sys(2)= 1/m * (ut + dt) ; %狀態(tài)空間表達(dá)式
3.mdlOutputs函數(shù)
function sys = mdlOutputs(t,x,u)
sys(1)= x(1);
sys(2)= x( 2); %狀態(tài)空間方程輸出
?
總結(jié)
以上是生活随笔為你收集整理的Simulink里的S函数介绍(Matlab-1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AC自动机小结
- 下一篇: abcde类 ip地址_IP寻址基础,让