Featured image of post My Matlab LMI Toolbox user guide

My Matlab LMI Toolbox user guide

My Matlab LMI Toolbox user guide

LMI Introduction

利用線性矩陣不等式(Linear Matrix Inequalities, LMI),我們可以求解許多控制上的問題。此處以本人的碩士論文有用到的 LMI 問題為例。考慮以下 LMI 問題:

\[ \begin{bmatrix} \mathbf{A}_0^T \mathbf{P} + \mathbf{P} \mathbf{A}_0 + \varepsilon \mathbf{F}^T \mathbf{F} + \mathbf{Q} & \mathbf{P} \mathbf{E} \\ \mathbf{E}^T \mathbf{P} & - \varepsilon \bm{\mu}^{-1} \end{bmatrix} < 0 \] \[ \mathbf{P} = \mathbf{P}^T > 0, \quad \mathbf{P} = \mathbf{P}^T > 0 \quad, \varepsilon > 0 \]

在 Matlab 中建立 LMI 系统模型,可以被拆解成四個部分:

  1. 定義已知參數。(如: $\mathbf{A}_0$、$\mathbf{E}$、$\mathbf{F}$、$\bm{\mu}$)
  2. 定義待解矩陣的變數結構與維度。(如: $\mathbf{P}$、$\mathbf{Q}$、$\varepsilon$)
  3. 描述每個 LMI 的結構與內容。
  4. 求解LMI問題。

在 Matlab 中主要有兩種使用 LMI toolbox 的方法,「使用命令行(.m)」與「使用 GUI 介面 (lmiedit)」。 以下內容將會使用命令行,並依據四個部分作範例 code 解說。並介紹其中會用到的 Matlab Function。

Matlab Code Application

定義已知參數

此部分根據系統已知或假設的參數設定 $\mathbf{A}_0$、$\mathbf{E}$、$\mathbf{F}$、$\bm{\mu}$。

範例 Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
A0 = [zeros(n) eye(n) zeros(n); zeros(n) zeros(n) eye(n); -Ki -Kp -Kd];

E = [zeros(n) zeros(n) zeros(n); zeros(n) zeros(n) zeros(n); Ki Kp Kd];

% uncertanty parameters
alpha_bar = [inv(T)*inv(J0)*0.2*J0*inv(1.2*J0)*J0*T];
beta_bar = [inv(T)*inv(J0)*0.2*J0*inv(1.2*J0)*J0*T];
nabla = [alpha_bar zeros(n) zeros(n); zeros(n) beta_bar zeros(n); zeros(n) zeros(n) alpha_bar];

F = [eye(n) zeros(n) zeros(n); zeros(n) eye(n) zeros(n); zeros(n) zeros(n) eye(n)];

% uncertainty boundary
mu = nabla*nabla';

定義待解矩陣的變數結構與維度

此處定義 $\mathbf{P}$、$\mathbf{Q}$、$\varepsilon$。先簡單介紹此處會用到的命令:

  • setlmis: 初始化 LMI toolbox 系統,開始進行 LMI 設定。
  • lmivar: 定義 LMI 待求解矩陣。

setlmis

LMI 問題在 Matlab 中描述必須以 setlmis 開始,以 getlmis 結束。

  • setlmis ([]): 重置並直接創立一個 LMI 問題。
  • setlmis (LMISys): 定義變數 LMISys 為一個 LMI 問題。

lmivar

使用命令 lmivar 一次定義一個待解變數,並描述其維度與結構。

  • X = lmivar(type,structure) : 另一個待解變數 X
  • [X,n,sX] = lmivar(type,structure): 另一個待解變數 X,且輸出:
    • n:Number of decision variables
    • sX:Dependence of X on decision variables

其中 typestructure:

type Description
1 X 是一個對稱對角矩陣 (Symmetric matrix with a block diagonal structure)
2 X 是一個滿秩長方陣 (Full rectangular matrix)
3 X 為其他形式 (Other structure)
  • 當 type = 1:
Structure Description
structure(1) 方形矩陣維度
structure(2) 矩陣形式,1: full block ,0: scalar block (a scalar multiple of the identity matrix),-1: zero block
  • 當 type = 2: 直接定義長矩陣維度($m \times n$) structure = [m,n]
  • 當 type = 3: 自訂矩陣形式,參考 Advanced LMI Techniques

範例 Code:

1
2
3
4
5

setlmis([]); % initialization
P = lmivar(1, [size(A0,1), 1]); % Specify the structure and size of P
Q = lmivar(1, [size(A0,1), 1]); % Specify the structure and size of Q
epsilon = lmivar(1, [1 1]);  % Specify the structure and size of epsilon

描述每個 LMI 的結構與內容

此處定義 LMI 問題中的每個不等式。先簡單介紹此處會用到的命令:

  • lmiterm: 添加不等式與設定其結構。
  • getlmis: 獲得定義 LMI 問題的長陣列。

lmiterm

  • lmiterm(termID,A,B,flag): 在當前LMI問題中,添加一項(term)到某個不等式中。

termID: 一個四維向量。

termID Description
termID(1) +p 表達在第p個不等式左邊加上,-p 表達在第p個不等式右邊加上
termID(2:3) 表達矩陣不等式中的位置
termID(4) 表達此項(term)的類型,0:常數項,X:變量$AXB$,-X:變量$AX^TB$

A和B分別是常識或變量的左右係數。

當 flag = ’s’時,指定加入項(term)為 $AXB + (AXB)^T$。

預設 LMI 不等式都是求解負定($<0$)。為了求解正定($>0$)不等式,加入項(term)時,將termID(1) 直接設定為-p,將其加在不等式右邊。

getlmis

當 LMI 問題定義完成後,輸入命令: lmis = getlmis。輸出變數 lmis 將會是一個包含LMI問題的長陣列。

範例 Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
% Define LMI
lmiterm([1 1 1 P], 1, A0, 's'); % P*A + A'*P
lmiterm([1 1 1 Q], 1, 1); % Q
lmiterm([1 1 1 epsilon], 1, F'*F);
lmiterm([1 1 2 P], 1, E);
lmiterm([1 2 2 epsilon], -1, inv(mu));

lmiterm([-2 1 1 P], 1, 1); % -ID : >0
lmiterm([-3 1 1 Q], 1, 1);
lmiterm([-4 1 1 epsilon], 1, 1);

lmis = getlmis;

求解LMI問題

此處對 LMI 問題 lmis求解 。 先簡單介紹此處會用到的命令:

  • feasp: 對給定之 LMI 問題求解。
  • dec2mat: 獲得 LMI 求解結果。將求出的向量,根據對稱性轉換為普通的矩陣。

feasp

  • [tmin,xfeas] = feasp(lmis): 對給定之 LMI 問題求解。
    • tmin: 代表最佳化問題是否收斂。 如果 tmin < 0,則該問題有可行解。如果 tmin > 0,則該問題無可行解。
    • xfeas: 用於獲得可行解的變數。

dec2mat

  • valX = dec2mat(lmis,xfeas,X): 獲得 LMI 求解結果。變將 X 的可行解賦值到 valX
    • lmis: 包含LMI問題的長陣列。
    • xfeas: 可行解的變數。
    • X: 要提取之待求解變數。

範例 Code:

1
2
3
4
[t_min, LMI_Sol] = feasp(lmis);
P_Ans = dec2mat(lmis, LMI_Sol, P);
Q_Ans = dec2mat(lmis, LMI_Sol, Q);
epsilon_Ans = dec2mat(lmis, LMI_Sol, epsilon);

Discussion

至此,我們完整的介紹如何根據範例 LMI 問題,利用 Matlab 命令求解。LMI toolbox 為一個方便求解 LMI 問題的工具。需要注意的是: LMI toolbox 找不到可行解的 LMI 問題不代表可行解不存在,且其找到之可行解不保證為最優解 。就如同所有最佳化問題與最佳化演算法一樣,LMI 問題的求解過程也是一種最佳化求解,不能保證其找到全域最佳解。

Reference

[1] Guang-Ren Duan、Hai-Hua Yu, “LMIs in Control Systems Analysis Design and Applications”

[2] P. Gahinet, A. Nemirovski, A. J. Laub, and M. Chilali, “LMI Control Toolbox,” p. 356.

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy