LU分解は行列を下三角行列と上三角行列の積で表す方法でしたが、行・列の入れ替えを行わない場合と行う場合を区別する場合、後者をPLU分解(PLU decomposition/factorization)、LUP分解、部分ピボット選択付きLU分解などとよびます。
ピボットとは行簡約行列の主成分のことでした。行簡約階段形の正方行列であれば対角成分を指します。
別の行と入れ替えてピボットとする場合、これもピボットあるいはピボット選択とよびます。
LU分解を行えない場合でもPLU分解を行うことができる場合があります。
例えば次のような行列は、このままでは下三角行列と上三角行列に分解することはできません。
第\(1\)行と第\(2\)行を入れ替えるのであれば下三角行列と上三角行列に分解することは可能です。
また、数値計算においては行の並びによって丸め誤差の影響が大きくなることがあるため、これを避けるために行を入れ替える必要がある場合もあります。
これらのような目的で用いられるのがPLU分解です。
※行だけではなく列も入れ替えること(完全ピボット選択付きLU分解)も可能ですが、ここではPLU分解についてのみ述べます。また、基本的な原理のみを述べ、数値計算の手法などについては触れません。
方法
\(2\)行の入れ替えと等価な基本行列を\(P_1,P_2,P_3\)、ある行を定数倍して別の行に加える操作と等価な基本行列を\(L_1,L_2,L_3\)とし、これらにより以下のように上三角行列が得られたとします。
$$L_3P_3L_2P_2L_1P_1 A=U$$
\(L_3P_3L_2P_2L_1P_1\)が下三角行列であればこれを\(L^{-1}\)として\(A=LU\)にできるのですが、下三角行列であるとは限りません。
そこで、\(L_3P_3L_2P_2L_1P_1\)を下三角行列ではない行列と下三角行列に分離します。
\(P_1,P_2,P_3\)はそれぞれ\(2\)つの行を入れ替える基本行列なので、その逆行列は同じ行列です。つまり\(P_1P_1=I,\ P_2P_2=I,\ P_3P_3=I\)です。これらを上の式に挿入して、
$$L_3P_3L_2(P_3P_3)P_2L_1(P_2(P_3P_3)P_2)P_1 A=U$$
とすることができます。括りを変え、
$$(L_3)(P_3L_2P_3)(P_3P_2L_1P_2P_3)P_3P_2P_1 A=U$$
それぞれの括弧内を、
\begin{align}
L_3^{\prime}&=L_3\\
L_2^{\prime}&=P_3L_2P_3\\
L_1^{\prime}&=P_3P_2L_1P_2P_3\\
\end{align}
と置き換えると、
$$L_3^{\prime}L_2^{\prime}L_1^{\prime}P_3P_2P_1 A=U$$
さらに、
$$L=(L_3^{\prime}L_2^{\prime}L_1^{\prime})^{-1}$$
$$P=P_3P_2P_1$$
とすると、
$$PA=LU$$
と表すことができます。
\(L_3^{\prime}\)、\(L_2^{\prime}\)、\(L_1^{\prime}\)が下三角行列であればそれらの積も下三角行列であり、その逆数である\(L\)も下三角行列です。
以上により\(LU\)分解ができます。
\(L\)が下三角行列である理由は補足1を参照ください。
例
以下の行列を\(LU\)分解します。
\begin{align}
A=\begin{pmatrix}
7&1&5&4\\
7&5&9&6\\
42&10&37&34\\
21&15&45&73
\end{pmatrix}
\end{align}
(1) \(U\)の計算
\(A\)に\(L_{i}\)や\(P_{i}\)を掛けた行列を順に\(A^{(j)}\)とします。
第\(3\)行を第\(1\)行と入れ替えて第\(1\)列のピボットとするため、\(P_1\)を掛けます。
\begin{align}
A^{(1)}&=P_1 A\\&=
\begin{pmatrix}
0&0&1&0\\
0&1&0&0\\
1&0&0&0\\
0&0&0&1
\end{pmatrix}
\begin{pmatrix}
7&1&5&4\\
7&5&9&6\\
42&10&37&34\\
21&15&45&73
\end{pmatrix}\\
&=\begin{pmatrix}
42&10&37&34\\
7&5&9&6\\
7&1&5&4\\
21&15&45&73
\end{pmatrix}
\end{align}
第\(1\)列の第\(2-4\)行を消去するため\(L_1\)を掛けます。\(1\)つの成分だけではなく\(1\)度で\(3\)つの成分を消去している点に注意してください。\(L_1\)はそれぞれの基本行列の積です。
\begin{align}
A^{(2)}&=L_1 A^{(1)}\\&=
\begin{pmatrix}
1&0&0&0\\
-1/6&1&0&0\\
-1/6&0&1&0\\
-1/2&0&0&1
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
7&5&9&6\\
7&1&5&4\\
21&15&45&73
\end{pmatrix}\\
&=
\begin{pmatrix}
42&10&37&34\\
0&10/3&17/6&1/3\\
0&-2/3&-7/6&-5/3\\
0&10&53/2&56
\end{pmatrix}
\end{align}
第\(4\)行を第\(2\)行と入れ替えて第\(2\)列のピボットとするため\(P_2\)を掛けます。
\begin{align}
A^{(3)}&=P_2 A^{(2)}\\&=
\begin{pmatrix}
1&0&0&0\\
0&0&0&1\\
0&0&1&0\\
0&1&0&0
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
0&10/3&17/6&1/3\\
0&-2/3&-7/6&-5/3\\
0&10&53/2&56
\end{pmatrix}\\
&=
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&-2/3&-7/6&-5/3\\
0&10/3&17/6&1/3\\
\end{pmatrix}
\end{align}
第\(2\)列の第\(3,4\)行を消去するため\(L_2\)を掛けます。
\begin{align}
A^{(4)}&=L_2 A^{(3)}\\&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&1/15&1&0\\
0&-1/3&0&1
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&-2/3&-7/6&-5/3\\
0&10/3&17/6&1/3\\
\end{pmatrix}\\
&=
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&3/5&31/15\\
0&0&-6&-55/3\\
\end{pmatrix}
\end{align}
第\(3\)行を第\(4\)行と入れ替えて第\(3\)列のピボットにするため\(P_3\)を掛けます。
\begin{align}
A^{(5)}&=P_3 A^{(4)}\\&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&3/5&31/15\\
0&0&-6&-55/3\\
\end{pmatrix}\\
&=
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&-6&-55/3\\
0&0&3/5&31/15\\
\end{pmatrix}
\end{align}
第\(3\)列の第\(4\)行を消去するため\(L_3\)を掛けます。
\begin{align}
A^{(6)}&=L_3 A^{(5)}\\&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
0&0&1/10&1
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&-6&-55/3\\
0&0&3/5&31/15\\
\end{pmatrix}\\
&=
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&-6&-55/3\\
0&0&0&7/30\\
\end{pmatrix}
\end{align}
この\(A^{(6)}\)が\(U\)です。
\begin{align}
U=
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&-6&-55/3\\
0&0&0&7/30\\
\end{pmatrix}
\end{align}
(2)\(L\)の計算
実は\(L_2’=P_3L_2P_3=P_3L_2,\ L_1’=P_3P_2L_1P_2P_3=P_3P_2L_1\)と省略できるのですが、ここでは省略せずに書いています。補足1を読んでいただければ省略できる理由はわかるのではないかと思いますが、詳細は省略します。
\begin{align}
L_3^{\prime}&=L_3
=\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&1\\
0&0&1/10&1
\end{pmatrix}\\ \\
L_2^{\prime}&=P_3L_2P_3\\
&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&1/15&1&0\\
0&-1/3&0&1
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}\\
&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&-1/3&1&0\\
0&1/15&0&1
\end{pmatrix}\\ \\
L_1^{\prime}&=P_3P_2L_1P_2P_3\\
&=\scriptsize{
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&0&0&1\\
0&0&1&0\\
0&1&0&0
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
-1/6&1&0&0\\
-1/6&0&1&0\\
-1/2&0&0&1
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&0&0&1\\
0&0&1&0\\
0&1&0&0
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}
}\\
&=
\begin{pmatrix}
1&0&0&0\\
-1/2&1&0&0\\
-1/6&0&1&0\\
-1/6&0&0&1
\end{pmatrix}\\ \\
\end{align}
以上より、\(L\)を求めます。本ページ冒頭では
$$L=(L_3^{\prime}L_2^{\prime}L_1^{\prime})^{-1}$$
としましたが、積で表される行列の逆行列は個別の逆行列を入れ替えて掛けたものなので、
$$L=L_1^{\prime-1}L_2^{\prime-1}L_3^{\prime-1}$$
とできます。
この場合は\(L_1,L_2,L_3\)は単位行列に特定の行のみ定数を追加しただけの行列なので、その逆行列は定数の符号を反転するだけで済みます。
また、積は単位行列にこれらの定数を重ね合わせることで求められます(LU分解参照)。
\begin{align}
L&=(L_3^{\prime}L_2^{\prime}L_1^{\prime})^{-1}\\
&=L_1^{\prime-1}L_2^{\prime-1}L_3^{\prime-1}\\
&=
\begin{pmatrix}
1&0&0&0\\
-1/2&1&0&0\\
-1/6&0&1&0\\
-1/6&0&0&1
\end{pmatrix}^{-1}
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&-1/3&1&0\\
0&1/15&0&1
\end{pmatrix}^{-1}
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&1\\
0&0&1/10&1
\end{pmatrix}^{-1}\\
&=
\begin{pmatrix}
1&0&0&0\\
1/2&1&0&0\\
1/6&1/3&1&0\\
1/6&-1/15&-1/10&1
\end{pmatrix}
\end{align}
(3)\(P\)の計算
\begin{align}
P&=P_3P_2P_1\\
&=
\begin{pmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&0&1\\
0&0&1&0
\end{pmatrix}
\begin{pmatrix}
1&0&0&0\\
0&0&0&1\\
0&0&1&0\\
0&1&0&0
\end{pmatrix}
\begin{pmatrix}
0&0&1&0\\
0&1&0&0\\
1&0&0&0\\
0&0&0&1
\end{pmatrix}\\
&=
\begin{pmatrix}
0&0&1&0\\
0&0&0&1\\
0&1&0&0\\
1&0&0&0
\end{pmatrix}
\end{align}
(4)PLU分解の結果
以上より\(PA=LU\)は、
\begin{align}
\scriptsize{
\begin{pmatrix}
0&0&1&0\\
0&0&0&1\\
0&1&0&0\\
1&0&0&0
\end{pmatrix}
\begin{pmatrix}
7&1&5&4\\
7&5&9&6\\
42&10&37&34\\
21&15&45&73
\end{pmatrix}
=
\begin{pmatrix}
1&0&0&0\\
1/2&1&0&0\\
1/6&1/3&1&0\\
1/6&-1/15&-1/10&1
\end{pmatrix}
\begin{pmatrix}
42&10&37&34\\
0&10&53/2&56\\
0&0&-6&-55/3\\
0&0&0&7/30\\
\end{pmatrix}
}
\end{align}
となります。
補足
補足1 \(L\)が下三角行列であることの確認
補足2 PLU分解の演算順序
本ページでは、PLU分解を以下の手順で行うことを前提として述べています。
\(\color{white}{\rightarrow}\)\(P_1\):第\(1\)列のピボット選択\(\rightarrow\)\(L_1\):第\(1\)列の成分消去
\(\rightarrow\)\(P_2\):第\(2\)列のピボット選択\(\rightarrow\)\(L_2\):第\(2\)列の成分消去
\(\rightarrow\)\(P_3\):第\(3\)列のピボット選択\(\rightarrow\)\(L_3\):第\(3\)列の成分消去
例えば、第\(1\)列のピボット選択と第\(1\)列の成分消去を行った後にもう一度第\(1\)列のピボット選択を行うと\(L\)が下三角行列にならないかもしれないので注意してください。