P9 线性系统状态空间分析-《Matlab/Simulink与控制系统仿真》程序指令总结
《Matlab/Simulink與控制系統仿真》程序指令總結
- Matlab_Simulink_BookExample
- 9. 線性系統狀態空間分析
- 9.2.4 狀態方程求解
- 9.2.4.2 矩陣指數的性質及求法
- 9.2.4.1 齊次方程求解
- 9.2.4.3 非齊次方程求解
- 9.1 Matlab 函數
- 例題 9_2
- 例題 9_3
- 例題 9_4
- 例題 9_5
- 例題 9_6
- 例題 9_7
- 例題 9_8
- 例題 9_9
- 例題 9_10
- 例題 9_11
- 例題 9_12
書中詳細實例代碼可見:Github
更多關于基礎原理的講解:【控制】第九章-線性系統的狀態空間描述
Matlab_Simulink_BookExample
圖書:《Matlab/Simulink與控制系統仿真》
9. 線性系統狀態空間分析
狀態空間描述具有以下特點:
9.2.4 狀態方程求解
9.2.4.2 矩陣指數的性質及求法
對于線性定常系統來說,齊次方程的求解可歸結為求矩陣指數 eA(t?t0)e^{A(t-t_0)}eA(t?t0?) 。eA(t?t0)e^{A(t-t_0)}eA(t?t0?) 具有以下基本性質:
(性質1)組合性質,從
(性質12)矩陣指數 eAte^{At}eAt 可表示為有限項之和,即 eAt=∑i=0n?1Aiai(t)e^{At} = \sum_{i=0}^{n-1} A^i a_i(t)eAt=i=0∑n?1?Aiai?(t)
Proof. 見書 P243頁
9.2.4.1 齊次方程求解
X(t)=eA(t?t0)X(t0)X(t) = e^{A(t-t_0)} X(t_0)X(t)=eA(t?t0?)X(t0?)
X(t)=eAtX0X(t) = e^{At}X_{0}X(t)=eAtX0?
9.2.4.3 非齊次方程求解
X(t)=eA(t?t0)X(t0)+eAt∫t0te?AτBU(τ)dτX(t) = e^{A(t-{t_0})} X(t_0) + e^{At}\int_{t_0}^{t} e^{-A\tau} BU(\tau)d\tauX(t)=eA(t?t0?)X(t0?)+eAt∫t0?t?e?AτBU(τ)dτ
9.1 Matlab 函數
tf2ss() 將傳遞函數模型轉換為狀態空間模型
zp2ss() 將零極點模型轉換為狀態空間模型
ss 直接建立狀態空間模型
canon() 將系統直接轉化為對角型的函數
ss2ss() 進行狀態空間表達式的線性變換的函數
rat() 返回一個有理近似值的字符向量
ctrb() 求取系統可控判別矩陣的函數
obsv() 求取系統可觀判別矩陣的函數
ctrbf() 系統進行能控性分解的函數
obsvf() 系統進行能觀測性分解的函數
lyap() lyap2() dlyap() 求解李亞普諾夫方程函數
例題 9_2
% Page249:已知開環傳函,求狀態空間模型 clear; clc;% G1 函數的分子、分母多項式 num = [2, 8, 6]; den = [1. 8, 16, 6]; % 將 G1 傳遞函數模型轉換為狀態空間模型 [A1, B1, C1, D1] = tf2ss(num, den); % G2 函數的零極點、增益 z = [-1, -3]; p = [0, -2, -8]; k = 2; % 將 G2 傳遞函數模型轉換為狀態空間模型 [A2, B2, C2, D2] = zp2ss(z, p, k);例題 9_3
% Page250:已知系統的動力學微分方程,求系統的狀態空間模型 clear; clc;% 微分方程輸入量、輸出量的系數 num = [1, 2, 1]; den = [1, 3, 3, 1]; % 建立傳遞函數模型 sys1 = tf(num, den); % 求狀態空間表達式 sys = ss(sys1);例題 9_4
% Page251:已知系統狀態空間模型,求系統的對角標準型 clear; clc;A = [0 1 0; 0 0 1; -6 -11 -6]; B = [1; 0; 0]; C = [1 1 0]; D = 0; % 生成對角標準型 [As, Bs, Cs, Ds, Ts] = canon(A, B, C, D, 'mod');例題 9_5
% Page252:已知系統傳遞函數,求系統約當標準型 clear; clc;num1 = [2, 1]; den1 = [1, 7, 14, 8]; % 求系統的分式表達式 [r1, p1, k1] = residue(num1, den1); % 對分式結果進行變換,得到約當標準型 A1 = diag(p1); B1 = ones(length(r1), 1); C1 = rat(r1); D1 = 0;例題 9_6
% Page253:已知矩陣,求解狀態轉移矩陣 clear; clc;A = [0 1 0;0 0 1;1 -3 3;]; % 狀態轉移時刻 t = 0.2; % 計算狀態轉移矩陣 Phi = expm(A*t);例題 9_7
% Page253:已知狀態空間模型,求解脈沖響應、階躍響應、響應曲線 clear; clc;A = [-2 -2.5 -0.5; 1 0 0; 0 1 0]; B = [1; 0; 0]; C = [0 1.5 1]; D = []; % 建立狀態空間模型 G = ss(A,B,C,D); % 仿真時間 t = [0:0.1:20]'; % 計算脈沖響應并添加柵格 % impulse(G); grid on % 計算階躍響應并添加柵格 % step(G); grid on% 接著輸入如下代碼 % 初始狀態 xo = [1; 0; 2]; % 輸入量 u u(1, 1:20) = 2*ones(1, 20); u(1, 21:201) = 0.5*ones(1, 181); % 計算輸入響應 [y, t, x] = lsim(G, u, t, xo); % 繪制曲線 plot(t,x(:,1),'-', t,x(:,2),'--', t,x(:,3),'-.') % 添加坐標軸 xlabel('時間/秒'); ylabel('幅值'); % 添加柵格 grid % 添加標注 text(6, 0.3, 'x_1(t)'); text(6, -0.5, 'x_2(t)'); text(8, 1.8, 'x_3(t)');figure(2) plot(t,y)例題 9_8
% Page262:已知狀態空間模型,判斷系統是否可控?是否可觀? clear; clc;A = [1 0 -1; -1 -2 0; 3 0 1]; B = [1 0; 2 1; 0 2]; C = [1 0 0; 0 -1 0]; % 計算可控判別矩陣 M = ctrb(A, B); % 計算可控判別矩陣的秩 RM = rank(M); % 計算可觀判別矩陣 N = obsv(A, C); % 計算可觀判別矩陣的秩 RN = rank(N);例題 9_9
% Page263:已知狀態空間模型,判斷可控性,如果完全可控,轉化為可控 II 型 clear; clc;A = [1 2 0; 3 -1 1; 0 2 0]; B = [2; 1; 1]; C = [0 0 1]; D = 0; % 計算可控判別矩陣 T = ctrb(A, B); % 計算可控判別矩陣的秩 R = rank(T);% 計性狀態空間的線性變換 [Ac2, Bc2, Cc2, Dc2] = ss2ss(A, B, C, D, inv(T));例題 9_10
% Page263:已知狀態空間模型,求該系統的能觀 I 型 clear; clc;A = [1 2 0; 3 -1 1; 0 2 0]; B = [2; 1; 1]; C = [0 0 1]; D = [0]; % 計算可觀判別矩陣 T = obsv(A, C); % 進行狀態空間的線性變換 [Ao1, Bo1, Co1, Do1] = ss2ss(A, B, C, D, T);例題 9_11
% Page264:已知狀態空間模型,進行能控性分解和能觀性分解 clear; clc;A = [0 0 -1; 1 0 -3; 0 1 -3]; B = [1; 1; 0]; C = [0 1 -2]; % 能控性結構分解 [Ac, Bc, Cc] = ctrbf(A, B, C); % 能觀性結構分解 [Ao, Bo, Co] = obsvf(A, B, C);% 若想要得到標準形式 Acc = rot90(Ac, 2); Bcc = rot90(Bc, 2); Ccc = rot90(Cc, 2);例題 9_12
% Page269:已知系統狀態矩陣,給定正定對稱矩陣,求李亞普諾夫方程解 P clear; clc;% 狀態矩陣 A = [0 1; -1 -1]; % 給定的正定對稱矩陣 Q = [1 0; 0 1]; % 求解李亞普諾夫方程 P = lyap(A', Q);總結
以上是生活随笔為你收集整理的P9 线性系统状态空间分析-《Matlab/Simulink与控制系统仿真》程序指令总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P8 控制系统校正与综合-《Matlab
- 下一篇: P10 线性系统状态空间设计-《Matl