2015-11-18 378 views
1

我們必須在我的代碼中計算狀態空間A的穩態響應。 MATLAB函數tf(sys)爲我提供了傳遞函數。現在我想將這些tf函數與步驟輸入0.0175/s相乘。接下來,我必須採取限制s->0,這將給我穩態響應。但是,我不確定我將如何在MATLAB中編程。我不知道如何處理tf(sys)命令的輸出。誰能提供一些見解?我寫的代碼如下:matlab中的穩態響應

A=[ 0.00501 0.00464 -72.90 -31.34; 
    -0.08570 -0.545 309 -7.4; 
    0.00185 -0.00767 -0.395 0.00132; 
    0 0 1 0]; 

B=[5.63 -23.8 -4.51576 0]'; 

C=[1 0 0 0; 
    0 1 0 0; 
    0 0 1 0; 
    0 0 0 1]; 

D=0; 

sys=ss(A,B,C,D); 

tf=tf(sys) 

回答

1

所有你需要使用的是dcgain功能推斷出穩態值是每一次轉換成你的狀態空間模型的輸入/輸出關係,其等效傳遞函數。計算階躍響應時,直流增益本質上取極限爲s->0。但是,雖然並不需要繪製階躍響應,但通過圖形驗證dcgain能夠爲您提供正確的結果可能很有用。在這種情況下,請使用step。它發現線性動力系統的階躍響應,包括狀態空間模型。在你的情況下,一旦你轉換爲tf對象,你將不得不調整你的傳輸函數0.0175,然後調用step以及dcgain

我也將您的最後一個變量重命名爲T,因爲tf是一個實際的函數,但您會用變量tf掩蓋該函數。

簡單地說:

%// Your code 
clear all; clc; 

A=[ 0.00501 0.00464 -72.90 -31.34; 
    -0.08570 -0.545 309 -7.4; 
    0.00185 -0.00767 -0.395 0.00132; 
    0 0 1 0]; 

B=[5.63 -23.8 -4.51576 0]'; %' 

C=[1 0 0 0; 
    0 1 0 0; 
    0 0 1 0; 
    0 0 0 1]; 

D=0; 

sys=ss(A,B,C,D);  
T=0.0175*tf(sys); %// Change 

%// New - find the step response 
[y,t] = step(T); 

%// Plot the step response 
plot(t, y); 
legend('x1', 'x2', 'x3', 'x4'); 

%// Determine the steady-state values 
format long g; 
ss_values = dcgain(T); 
disp(ss_values); 

我得到這些對我的穩態值:

>> ss_values 

ss_values = 

      23.7245028635498 
     -4.57981861496758 
         0 
     0.00625827699339293 

我也得到這個情節:

enter image description here

ŧ他的穩態值或多或少與我們在劇情中看到的一致。

+1

謝謝!這可以幫助我很多:) –

+0

@JurriënPlijtergraag gedaan。祝你好運! – rayryeng

+0

也許這會有助於說明爲什麼用'0.0175'而不是'0.0175/s'來增加輸入,特別是當使用'dcgain'時('step'不言自明)。 – IKavanagh