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 系统模型,可以被拆解成四個部分:
- 定義已知參數。(如: $\mathbf{A}_0$、$\mathbf{E}$、$\mathbf{F}$、$\bm{\mu}$)
- 定義待解矩陣的變數結構與維度。(如: $\mathbf{P}$、$\mathbf{Q}$、$\varepsilon$)
- 描述每個 LMI 的結構與內容。
- 求解LMI問題。
在 Matlab 中主要有兩種使用 LMI toolbox 的方法,「使用命令行(.m)」與「使用 GUI 介面 (lmiedit)」。 以下內容將會使用命令行,並依據四個部分作範例 code 解說。並介紹其中會用到的 Matlab Function。
Matlab Code Application
定義已知參數
此部分根據系統已知或假設的參數設定 $\mathbf{A}_0$、$\mathbf{E}$、$\mathbf{F}$、$\bm{\mu}$。
範例 Code:
|
|
定義待解矩陣的變數結構與維度
此處定義 $\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 variablessX
:Dependence of X on decision variables
其中 type
與 structure
:
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:
|
|
描述每個 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:
|
|
求解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:
|
|
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.