基於狀態空間的建模過程


我們得到的矩陣

A = [0 1 0 0;

  30.0503 0 0 2.9156;

  0 0 0 1;

  -0.5117 0 0 -1.0015]

B = [0;

  -2.4614;

  0;

  0.8455]

C = [1 0 0 0;

  0 0 1 0]

D =0

 建模前我們先討論下,ABCD分別是什么,怎么計算出來:

我們可以寫成狀態方程:

    X(k+1) = A * X(k) + B * u(k)

    Y(k)     = C * X(k) + D * u(k)

A,系統矩陣,直接反映了X(k)和X(k+1)的關系;B,輸入矩陣,加入控制的影響;C,輸出矩陣,用於觀測;D,前饋矩陣,當一個量x本來是影響系統的,但x並未考慮在系統矩陣A中,便會通過D來實現,一般來說很少出現,因為我們希望矩陣A是包含所有影響系統的因素的。

那他們是怎么算出來的呢?

A和B可以通過體現系統建模得出,A和B也對接下來的編程等是不可缺少的,C的確定原自你想要觀測什么,如狀態方程實際上反應的是[a(k+1); a(k+1)'; b(k+1); b(k+1)']和

[a(k); a(k)'; b(k); b(k)']的關系,就拿后者來說,我們只需要關注a(k)和b(k)就可以了,因為a(k)'和b(k)'是可以通過數學計算得出的,所以在這:

  C = [1 0 0 0;

    0 0 1 0]

D = 0,這個不用多講:

我們真正關注的是A和B,CD不用過多考慮

用matlab代碼建模,也可用simulink:

clear all                                       #清理之前的空間

A = [0 1 0 0;                               #輸入各矩陣

  30.0503 0 0 2.9156;

  0 0 0 1;

  -0.5117 0 0 -1.0015]

B = [0;

  -2.4614;

  0;

  0.8455]

C = [1 0 0 0;

  0 0 1 0]

D =1

sys = ss(A,B,C,D);                                #將ABCD空間化

sys1 = c2d(sys,0.1)                             #將sys離散化,采樣時間0.1s

x = [0;

  0;

  0;

  0];                                                #初始狀態假設為0

u = 0.001;                                           #初始控制量(這個隨意,只是為了驗證)

for  i = 1:100                                      #觀察10s內的變化,采樣為0.1s,需要采樣100次

  x(:,i+1) = sys1(1,1).A * x(:,i) + sys1(1,1).B * u;              #經典的方程,乘法注意矩陣維度

end

#可以查看變量x的100次變化,簡單的離散化模型就建立完成了,以上僅僅是模型,為了更好的結果還需要有控制器等,這里不詳細說明

體會:問題模型已經通過矩陣(ABCD)顯示出來了,里面的公式等等就相當於是個箱子,我們通過輸入矩陣,得到的結果也僅僅是矩陣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM