克羅內克積 (Kronecker product) 線上性矩陣不等式 (LMI) 中怎麼描述
1. Kronecker 積的定義及性質
如果\(A, B\)分別是階數為\(m\times n, p\times q\)的矩陣, 那麼\(A\)和\(B\)的Kronecker積\(A\bigotimes B\)是階數為\(mp\times nq\)的矩陣. \(A\)和\(B\)的Kronecker積為
\[A\bigotimes B= \begin{pmatrix} a_{11}B & \cdots & a_{1n}B\\ \vdots & \ddots & \vdots\\ a_{m1}B & \cdots & a_{mn}B \end{pmatrix}. \]性質:
文獻 [1] 第 280 頁, 給出了 Kronecker 積的一個性質: \[(A_1\bigotimes B_1)(A_2\bigotimes B_2) = (A_1A_2) \bigotimes (B_1B_2). \]
(Kronecker 積還有很多有用的性質, 這裡只寫出下文要用到的一條)
2. Kronecker 積在 LMI 中舉例
如果 \(\bigotimes\) 兩側均為已知矩陣,那麼用MATLAB中的kron
函式計算。下文中處理 \(\bigotimes\) 的右側含有未知矩陣的情形,假設 \(X\) 為所求未知矩陣.
2.1 形為 \(A\bigotimes X<0\) 的 LMI
處理方法1:
設 \(A = (a_{ij})_{2\times 2}\) 為已知矩陣, \(X = (x_{ij})_{2\times 2}\) 為決策變數且 \(X\) 為對稱陣. 假設 LMI 中出現項 \(A\bigotimes X\), 則
於是, 在描述線性矩陣不等式 \(A\bigotimes X<0\)
bigX
與bigA
來代替這個乘積:
% 假設A在本行之前已定義
bigA = [A(1,1) 0 A(1,2) 0; 0 A(2,1) 0 A(2,2)]; % 已知矩陣
[X, ~, sX] = lmivar(1, [2 1]); % 定義決策變數 X
bigX = lmivar(3, [sX O; sX O; O sX; O sX]); % 定義組合矩陣 bigX
lmiterm([1 1 1 bigX], bigA, 1) % 描述LMI
其中O
是與 \(X\) 同維的零矩陣 (注意區分字母O
和數字0
). 上面的定義[X, ~, sX]
中, X
儲存矩陣 \(X\) 的值, sX
儲存矩陣 \(X\) 的結構, 所以如果在其他部分還用到了矩陣 \(X\), 那麼
- (1) 若需要用 \(X\) 拼接出其他矩陣, 則使用
sX
, 即使用 \(X\) 的結構進行拼接; - (2) 若描述包含 \(X\) 的項 (矩陣直接相乘的項,不包含 Kronecker 積), 則使用
X
.
這種處理方式的關鍵是找到bigX
和bigA
對 \(A\bigotimes X\) 分解, 對於維數較高的情形,找出分解會非常困難, 所以介紹方法2.
處理方法2:
利用第 1 節中的性質, 我們有
其中 \(I_1, I_2\) 為適當維數的單位陣 (更確切地說, \(I_1\)的維數等於\(A\) 的列數, \(I_2\) 的維數等於 \(X\) 的行數). 由於 \(A\bigotimes I_2\) 為已知矩陣, 所以只需處理\(I_1\bigotimes X\) 即可:
\[I_1\bigotimes X = \begin{pmatrix} X & &\\ &\ddots &\\ & &X \end{pmatrix}. \]不妨設 \(I_1, X\) 均為2階矩陣, 則這一項可如下處理:
% 定義變數
[X, ~, sX] = lmivar(1, [2 1]);
bigX = lmivar(3, [sX O; O sX]);
% 描述LMI
lmiterm([1 1 1 bigX], 1, 1)
2.2 形為 \(A\bigotimes (BX)<0\) 的 LMI
在LMI \(A\bigotimes (BX)<0\), \(A,B\) 為已知矩陣, \(X\) 為未知矩陣. 由第 1 節性質可知
\[A\bigotimes (BX) = (AI)\bigotimes (BX) = (A\bigotimes B)(I \bigotimes X), \]上式中 \(I\) 表示適當維數的單位陣, \(A\bigotimes B\) 為已知矩陣, 只需對 \(I \bigotimes X\) 按照 2.1 中的方法處理.
3. 說明
- 在定義
bigX
時,不能把 \(A\) 作為係數直接乘到X
上,原因見博文Matlab中使用LMI toolboxLMI, 連結 https://blog.csdn.net/qq_28093585/article/details/69358180,其中一個例子如下:
setlmis([])
[R,~,sR] = lmivar(1,[3 1]);
[P,~,sP] = lmivar(1,[3 1]);
A = [2,0,0;0,2,0;0,0,2];
[ph1,~,sph1] = lmivar(3,A*sR); % 錯誤, 不會報錯, 結果也不等於A*變數R
[ph2,~,sph2] = lmivar(3,2*sR); % 錯誤, 不會報錯, 結果也不等於變數R的2倍
[ph3,~,sph3] = lmivar(3,-sR); % 正確, 結果會等於-R
[ph4,~,sph4] = lmivar(3,sR'); % 正確, 結果會等於R的轉置
參考文獻
[1] 程雲鵬, 張凱院, 徐仲. 矩陣論 (第四版). 西安: 西北工業大學出版社, 2013.