matlab中(1 )什么意思,matlab中area(1)什么意?mat – 手机爱问
2013-10-24
DirFeedthrough 什么意?
s-function也就是system-function的縮寫。說得簡單,s-function就是用MATLAB所提供的模型不能完全滿足用戶,而提供給用戶自己編寫程序來滿足自己要求模型的接口。 要了解 s-function,必須了解以下知識:
(1)direct feedthrough
(2)dynamically sized inputs
(3)setting sample times and offsets
一。 direct feedthrough
direct feedthrough意思是說系統的輸出或可變采樣時間是否受到輸入的控制。有的系統是受到輸入控制的,如:
y=k*u...全部
s-function也就是system-function的縮寫。說得簡單,s-function就是用MATLAB所提供的模型不能完全滿足用戶,而提供給用戶自己編寫程序來滿足自己要求模型的接口。
要了解 s-function,必須了解以下知識:
(1)direct feedthrough
(2)dynamically sized inputs
(3)setting sample times and offsets
一。
direct feedthrough
direct feedthrough意思是說系統的輸出或可變采樣時間是否受到輸入的控制。有的系統是受到輸入控制的,如:
y=k*u (u是輸入,k是放大因子,y是輸出)
而有的系統輸出是不受到輸入影響,如:
輸出:y=x
dx=u
x表示狀態
二。
dynamically sized inputs
主要是給出:輸入連續狀態數目(size。NumContStates),離散狀態數目(size。NumDiscStates) ,輸出數目(size。
NumOutputs),輸入數目(size。NumInputs),Direct Feedthrough(size。Dir Feedthrough)。
三。setting sample times and offsets
setting smaple times and offsets主要設置采樣時間。
MATLAB為了用戶方便,已經書寫了S-FUNCTIONS模板函數sfuntmpl。m。為了更好的寫S-Function,該函數sfuntmpl。m內容如下面所示,該函數可以通過which sfuntmpl。
m來查看它的位置。一般是在\toolbox\simulink\blocks\文件夾中,然后通過輸入命令edit sfuntmpl。m來查看M代碼,當然也可以使用type函數。
事例一:連續系統例子:
function [sys,x0,str,ts] = csfunc(t,x,u,flag)
A=[-0。
09 -0。01; 1 0];
B=[ 1 -7; 0 -2];
C=[ 0 2; 1 -5];
D=[-3 0; 1 0];
switch flag,
case 0
[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);
case 1
sys=mdlDerivatives(t,x,u,A,B,C,D);
case 3
sys=mdlOutputs(t,x,u,A,B,C,D);
case { 2, 4, 9 }
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)
sizes = simsizes;
sizes。
NumContStates = 2; sizes。NumDiscStates = 0; sizes。NumOutputs = 2;
sizes。NumInputs = 2; sizes。DirFeedthrough = 1; sizes。
NumSampleTimes = 1;
sys = simsizes(sizes); x0 = zeros(2,1); str = []; ts = [0 0];
function sys=mdlDerivatives(t,x,u,A,B,C,D)
sys = A*x + B*u; % end mdlDerivatives
function sys=mdlOutputs(t,x,u,A,B,C,D)
sys = C*x + D*u; % end mdlOutputs
事例二:離散系統
function [sys,x0,str,ts] = dsfunc(t,x,u,flag)
A=[-1。
3839 -0。5097 1。0000 0];
B=[-2。5559 0 0 4。2382];
C=[ 0 2。0761 0 7。7891];
D=[ -0。8141 -2。9334 1。
2426 0];
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D);
case 2
sys = mdlUpdate(t,x,u,A,B,C,D); %%%%%%%%%%
case 3
sys = mdlOutputs(t,x,u,A,C,D); %%%%%%%%%%%%%
case 9
sys = [];
otherwise
error(['unhandled flag = ',num2str(flag)]);
end %end dsfunc
function [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D)
sizes = simsizes;
sizes。
NumContStates = 0; sizes。NumDiscStates = size(A,1); sizes。NumOutputs = size(D,1);
sizes。NumInputs = size(D,2); sizes。
DirFeedthrough = 1; sizes。NumSampleTimes = 1;
sys = simsizes(sizes); x0 = ones(sizes。NumDiscStates,1); str = []; ts = [1 0];
function sys = mdlUpdate(t,x,u,A,B,C,D)
sys = A*x+B*u; %end mdlUpdate
function sys = mdlOutputs(t,x,u,A,C,D)
sys = C*x+D*u; %end mdlUpdate
事例三:離散和連續的混合型
function [sys,x0,str,ts] = mixedm(t,x,u,flag)
dperiod = 1; doffset = 0;
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes(dperiod,doffset);
case 1
sys=mdlDerivatives(t,x,u);
case 2
sys=mdlUpdate(t,x,u,dperiod,doffset);
case 3
sys=mdlOutputs(t,x,u,doffset,dperiod);
case 9
sys = [];
otherwise
error(['unhandled flag = ',num2str(flag)]);
end % end mixedm %
function [sys,x0,str,ts]=mdlInitializeSizes(dperiod,doffset)
sizes = simsizes; sizes。
NumContStates = 1; sizes。NumDiscStates = 1;
sizes。NumOutputs = 1; sizes。NumInputs = 1; sizes。DirFeedthrough = 0;
sizes。
NumSampleTimes = 2; sys = simsizes(sizes); x0 = ones(2,1); str = [];
ts = [0 0;dperiod doffset];
function sys=mdlDerivatives(t,x,u)
sys = u; % end mdlDerivatives
function sys=mdlUpdate(t,x,u,dperiod,doffset)
if abs(round((t - doffset)/dperiod) - (t - doffset)/dperiod) < 1e-8, sys = x(1);
else sys = []; end % end mdlUpdate
function sys=mdlOutputs(t,x,u,doffset,dperiod)
if abs(round((t - doffset)/dperiod) - (t - doffset)/dperiod) < 1e-8, sys = x(2); else sys = []; end
本帖中對是連續,離散,連續與離散混合系統的三個例子加以說明,以至于大家在看下面的例子時能更好的理解。
一。函數mdlInitializeSizes
對于描述連續型的函數csfunc。m
sizes。NumContStates = 2; sizes。NumDiscStates = 0;
表明本函數是描述連續型的
sizes。
NumOutputs = 2; sizes。NumInputs = 2;
sizes。DirFeedthrough = 1; sizes。NumSampleTimes = 1;
對于描述離散型的函數dsfunc。
m
sizes。NumContStates = 0; sizes。NumDiscStates = size(A,1);
表明本函數是描述離散型的
sizes。NumOutputs = size(D,1); sizes。
NumInputs = size(D,2);
sizes。DirFeedthrough = 1; sizes。NumSampleTimes = 1;
對于描述混合型的函數mixedm。m
sizes。
NumContStates = 1; sizes。NumDiscStates = 1;
表明本函數是描述混合型的
sizes。NumOutputs = 1; sizes。NumInputs = 1;
sizes。
DirFeedthrough = 0; sizes。NumSampleTimes = 2;
關于變量sizes。numoutputs和sizes。numinputs則由描述的系統的輸出,輸入而定。
關于變量sizes。DirFeedthrough,則可以查看矩陣D,如果D是非空,則為1,否則為0
關于變量sizes。NumSampleTimes,即是ts這個矩陣的行數。
二。函數mdlDerivatives
僅僅出現在含有連續型的系統中;這部分應該根據系統狀態來決定。
三。函數mdlUpdate 僅僅出現在含有離散型的系統中;該函數應該根據系統狀態來決定
四。函數mdlOutputs 該函數在各種類型中都有,應該根據描述系統的輸出來決定;
五。關于書寫s-functions函數的注意之點
(1)我想大家都會覺得上述三個函數都不利于維護,因此在寫s-functions函數時不妨把矩陣 A,B,C,D也考慮成變量,作為輸入參數;
(2)關于在csfuncs。
m中的型如case(2,4,9)這種形式,大家最好不要采用,不利于維護,可以分開來寫
(3)關于結構sizes中的各個變量的值,最好從輸入參量中得到,而不是通過人為判斷來輸入
(4)因此,其實上述三種形式,可以變化成一種形式。
(5)可以通過對相應于你所要求的系統對上述三個函數加以相應的改進來到達自己的要求,因此可以把上述函數當成模板函數。
。收起
總結
以上是生活随笔為你收集整理的matlab中(1 )什么意思,matlab中area(1)什么意?mat – 手机爱问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php电商交押金的逻辑,PHP高并发下抢
- 下一篇: 在显著性区域外画矩形框matlab,Ma