1. 程式人生 > 其它 >克羅內克積 (Kronecker product) 線上性矩陣不等式 (LMI) 中怎麼描述

克羅內克積 (Kronecker product) 線上性矩陣不等式 (LMI) 中怎麼描述

本文給出了含未知變數的克羅內克積 (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= \begin{pmatrix} a_{11}X & a_{12}X\\ a_{21}X & a_{22}X \end{pmatrix}= \begin{pmatrix} a_{11} & 0 & a_{12} & 0 \\ 0 & a_{21} & 0 & a_{22} \end{pmatrix} \begin{pmatrix} X & O \\ X & O\\ O & X \\ O & X \end{pmatrix}. \]

於是, 在描述線性矩陣不等式 \(A\bigotimes X<0\)

時, 就可以用bigXbigA來代替這個乘積:

% 假設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.

這種處理方式的關鍵是找到bigXbigA\(A\bigotimes X\) 分解, 對於維數較高的情形,找出分解會非常困難, 所以介紹方法2.
處理方法2:
利用第 1 節中的性質, 我們有

\[A\bigotimes X = (AI_1)\bigotimes(I_2X) = (A\bigotimes I_2)(I_1\bigotimes X), \]

其中 \(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. 說明

  1. 在定義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.