我們得到的矩陣
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)顯示出來了,里面的公式等等就相當於是個箱子,我們通過輸入矩陣,得到的結果也僅僅是矩陣