2011-11-17 181 views
3

我想從狀態空間矩陣生成一個傳遞函數。 問題是矩陣有變量而不是數值,所以我必須在Matlab中使用符號變量。MATLAB符號狀態空間矩陣太大

於是我開始:

A = 

[ -a0, 0, 0, 0, 0, 0, a1] 
[ 0, -a2, 0, 0, 0, 0, a3] 
[ 0, 0, -a4, 0, 0, 0, a5] 
[ 0, 0, 0, -a6, 0, 0, a7] 
[ 0, 0, 0, 0, -a8, 0, a9] 
[ 0, 0, 0, 0, 0, -a10, a11] 
[ a12, a13, a14, a15, a16, a17, -a18] 

B = 

[ b0, b1] 
[ 0, b2] 
[ 0, b3] 
[ 0, b4] 
[ 0, b5] 
[ 0, b6] 
[ 0, 0] 

C = 

[ 0, 0, 0, 0, 0, 0, 1] 

D = 0 

然後我發現了一個方法,在網上使用

Phi=inv(s*eye(7)-A) 

其中Phi是轉移matirx。然後使用

H = C * Phi * B + D 

H應該是結果。

但是,MATLAB不能處理7乘7的矩陣,並最終截斷結果。

有沒有更好的方法可以實現我需要的傳遞函數?

+0

看起來手動操作更容易。你是否嘗試過簡單地計算出你在那裏的公式? – Phonon

+0

是的。不是。我手工嘗試了它,但它變得非常快速。 – CMacDady

+0

「截斷結果」是什麼意思? – silvado

回答

4

看看這個維基百科article on matrix inversion。當考慮矩陣(Is-A)時,它具有非常特殊的形狀,您可以使用該文章中給出的一些身份來反轉它。所有你需要做的就是把它分成塊,其中A是你的對角線部分,B是右邊的垂直矢量,C是底部的水平矢量,D是矩陣右下角的單個元素。唯一需要這樣做的倒置是倒向A,它是對角的且非常容易倒轉,並且(D-C * inv(A)* B)是單個數字,因爲C和B分別是行和列向量。這可以非常容易地通過手工或符號工具箱完成。

+0

謝謝。我將來會把這個加入書籤。現在我只會用一個較小的矩陣。 – CMacDady

1

爲了與B尺寸兼容,你D矩陣應該是

D = [0 0]; 

也許H的截斷正緣於此?

+0

我已經改變了。但它仍然在做同樣的事情。現在我已經將模型簡化爲3x3矩陣。該代碼現在工作並輸出兩個傳輸函數。即使簡化,它們也很大。我不知道matlab根本無法處理這種大小的符號結構。 – CMacDady