LU 分解

この記事は, 旧ブログから移植された記事です. よって, その内容として, 旧ブログに依存した文脈が含まれている可能性があります. 予めご了承下さい.

LU 分解に関して初歩的な内容から網羅的にまとめた.

ガウスの消去法

ガウスの消去法は, 前進消去による上三角行列の形成と後退代入の組み合わせのことをいい, その本質は行列の行基本変形, すなわち中学校で習う連立方程式の解法そのものである. 例えば, 何の芸もないが, 次の連立方程式

{x+2y=33x+4y=5(123345)(1) \begin{aligned} \begin{cases} x+2y&=&3 \\ 3x+4y&=&5 \end{cases}\leftrightarrow \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 3 & 4 & 5 \end{array}\right)\tag{1} \end{aligned}

をガウスの消去法では次のようにして解くのであった.

(123345)(1×(3)2×(3)3×(3)345)前進消去(123024)(1230×12×14×1)後退代入(101024)(x,y)=(1÷1,4÷(2))=(1,2) \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 3 & 4 & 5 \end{array}\right)\to \underbrace{ \left(\begin{array}{cc|c} \overbrace{1}^{\times (-3)} & \overbrace{2}^{\times (-3)} & \overbrace{3}^{\times (-3)} \\ \underline{3} & 4 & 5 \end{array}\right) }_{\rm 前進消去}\to \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 0 & -2 & -4 \end{array}\right)\to \underbrace{ \left(\begin{array}{cc|c} 1 & \underline{2} & 3 \\ \overbrace{0}^{\times 1} & \overbrace{-2}^{\times 1} & \overbrace{-4}^{\times 1} \end{array}\right) }_{\rm 後退代入} \\ \to \left(\begin{array}{cc|c} 1 & 0 & -1 \\ 0 & -2 & -4 \end{array}\right) \\ \therefore (x,y)=(-1\div 1,-4\div (-2))=(-1,2)

この前進消去の操作は次のように行列の積で表現できる.

(1031)(1234)=(1202) \left(\begin{array}{cc} 1 & 0 \\ -3 & 1 \end{array}\right) \left(\begin{array}{cc} 1 & 2 \\ 3 & 4 \end{array}\right)= \left(\begin{array}{cc} 1 & 2 \\ 0 & -2 \end{array}\right)

これを理解しておくと後述する LU 分解の理解に容易くなる. ここで, この時間計算量について, 一般の nn 次線形連立方程式 Xa=y where XRn×n,aRn×1,yRn×1X{\boldsymbol a}={\boldsymbol y}\ {\rm where}\ X\in\mathbb{R}^{n\times n}, {\boldsymbol a}\in\mathbb{R}^{n\times 1}, {\boldsymbol y}\in\mathbb{R}^{n\times 1} を用いて考えるする.

(x11x12x13x1nx21x22x23x2nx31x32x33x3nxn1xn2xn3xnn)(a1a2a3an)=(y1y2y3yn)\left(\begin{array}{ccccc} x_{11} & x_{12} & x_{13} & \cdots & x_{1n} \\ x_{21} & x_{22} & x_{23} & \cdots & x_{2n} \\ x_{31} & x_{32} & x_{33} & \cdots & x_{3n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & x_{n3} & \cdots & x_{nn} \end{array}\right) \left(\begin{array}{c}a_1 \\ a_2 \\ a_3 \\ \vdots \\ a_n\end{array}\right)= \left(\begin{array}{c}y_1 \\ y_2 \\ y_3 \\ \vdots \\ y_n\end{array}\right)

まず前進消去の操作について考える. 前進消去では, x11x_{11} を使って残りの x21,x31,,xn1x_{21}, x_{31}, \cdots, x_{n1} を掃き出していくのであった. ただし x21,x31,,xn1x_{21}, x_{31}, \cdots, x_{n1} は必ず 00 となるのだから, これは実質の計算量として考える必要はないだろう. すると x21,x31,,xn1x_{21}, x_{31}, \cdots, x_{n1} を掃きだすのに伴って, 実際の計算を要される部分というのは

x22x23x2nx32x33x3nxn2xn3xnn \begin{array}{cccc} x_{22} & x_{23} & \cdots & x_{2n} \\ x_{32} & x_{33} & \cdots & x_{3n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n2} & x_{n3} & \cdots & x_{nn} \end{array}

の箇所であることがいえる. この部分の成分数は (n1)2(n-1)^2 なので, 一回目の前進消去では (n1)2(n-1)^2 回の計算を行うことがわかる. 次に, 二回目の前進消去では x22x_{22} を使って, それと同列のそれよりも下の行の成分 x32,,xn2x_{32},\cdots,x_{n2} を先と同様に消していくわけだが, ここでも同様, x32,,xn2x_{32},\cdots,x_{n2} は必ず 00 なので, 実際に計算を行う部分は

x33x3nxn3xnn \begin{array}{ccc} x_{33} & \cdots & x_{3n} \\ \vdots & \ddots & \vdots \\ x_{n3} & \cdots & x_{nn} \end{array}

の箇所である. この部分の成分数は (n2)2(n-2)^2 なので, 二回目の全身消去では (n2)2(n-2)^2 回の計算を行うことがわかる. これを繰り返すと, 計算を行う部分が残り一成分となるまで同様の計算回数がかかることがわかるから

(n1)2+(n2)2++22+12=i=1n(i1)2(n-1)^2+(n-2)^2+\cdots+2^2+1^2 =\sum^{n}_{i=1}(i-1)^2

ここで, 高校数学の教科書にも載っている定理(証明略) j=1nj2=n(n+1)(2n+1)6\sum^n_{j=1}j^2=\frac{n(n+1)(2n+1)}{6} を思い出せば, 先の式は i=1n(i1)2=n33+n2\sum^n_{i=1}(i-1)^2=\frac{n^3}{3}+n^2 と表せることがわかる.

続いて, 後退代入について考える. 後退代入は, 上三角行列となっている係数行列に対して代入を繰り返し, 対角行列を形成していく操作であった.

(x11x12x13x1nx22x23x2nx33x3nxnn)(a1a2a3an)=(y1y2y3yn)\left(\begin{array}{ccccc} x_{11} & x_{12} & x_{13} & \cdots & x_{1n} \\ & x_{22} & x_{23} & \cdots & x_{2n} \\ & & x_{33} & \cdots & x_{3n} \\ & & & \ddots & \vdots \\ &&&& x_{nn} \end{array}\right) \left(\begin{array}{c}a_1 \\ a_2 \\ a_3 \\ \vdots \\ a_n\end{array}\right)= \left(\begin{array}{c}y_1 \\ y_2 \\ y_3 \\ \vdots \\ y_n\end{array}\right)

この場合, まず xnnx_{nn} を使って, x1n,x2n,x3n,,x(n1)nx_{1n},x_{2n},x_{3n},\cdots,x_{(n-1)n} を消していくわけだが, この際, 係数行列に対する操作というのはただ 00 にしていくということだけである. これを x22x_{22} まで繰り返し行うわけだが, その間の係数行列に関する操作はただ 00 にしていくということだけなので, これを計算量に含む必要はない. 実際に計算が発生するのは, 右辺ベクトルの部分である. まず yny_n に対する計算は, 後退代入の操作を考えれば, 当然なにもする必要はない. 次に yn1y_{n-1} に対する計算は (yn1)=yn1x(n1)nxnnyn(y_{n-1})'=y_{n-1}-\frac{x_{(n-1)n}}{x_{nn}}y_n であり, 減算, 除算, 積算が各一回ずつ行われることがいえる. 次の yn2y_{n-2} に対する計算も同様 yn2x(n2)nx(n1)n(yn1)y_{n-2}-\frac{x_{(n-2)n}}{x_{(n-1)n}}(y_{n-1})' であり, 計算の形式は先と全く同じであるが, その前の後退代入の結果 (yn1)(y_{n-1})' を用いている点で計算量は異なる. つまり, いま計算したい右辺ベクトルの成分を計算するのには, その一つ下の右辺ベクトルの成分に対する計算結果が必要となる(後退代入の操作そのもの)ことから, これが y1y_1 にまで及ぶことを考えると, 後退代入の総回数は

1+2++(n1)=n(n1)21+2+\cdots+(n-1)=\frac{n(n-1)}{2}

とかける(右辺への式変形の証明は高校数学の教科書で扱われているので略). ガウスの消去法は前進消去と後退代入の組み合わせであるので, その時間計算量は,

O(n33+n(n1)2)(2)O(\frac{n^3}{3}+\frac{n(n-1)}{2})\tag{2}

ただし各項の中で最高次の係数だけを考えればよいので, ガウスの消去法の時間計算量は

13O(n3)\frac{1}{3}O(n^3)

である.

ガウス・ジョルダン法

ガウスの名がつく行列を用いた線形方程式の直接解法には, 今述べたガウスの消去法のほかにガウス・ジョルダン法というものがある. これらは明確に区別されたところであまり意味がないような気もするが, ガウスの消去法が上記のように係数行列となる部分を単位行列でない対角行列へと変形していったのに対し, ガウス・ジョルダン法はそれを直接単位行列となるように変形していく点で異なる. ガウス・ジョルダン法で同様にして計算していくと,

(123345)(1×(3)2×(3)3×(3)345)(123024)(1230×(12)2×(12)4×(12))(123012)(1230×(2)1×(2)2×(2))(101012)(x,y)=(1,2) \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 3 & 4 & 5 \end{array}\right)\to \left(\begin{array}{cc|c} \overbrace{1}^{\times (-3)} & \overbrace{2}^{\times (-3)} & \overbrace{3}^{\times (-3)} \\ \underline{3} & 4 & 5 \end{array}\right)\to \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 0 & -2 & -4 \end{array}\right)\to \left(\begin{array}{cc|c} 1 & 2 & 3 \\ \overbrace{0}^{\times (-\frac{1}{2})} & \overbrace{-2}^{\times (-\frac{1}{2})} & \overbrace{-4}^{\times (-\frac{1}{2})} \end{array}\right) \\ \to \left(\begin{array}{cc|c} 1 & 2 & 3 \\ 0 & 1 & 2 \end{array}\right)\to \left(\begin{array}{cc|c} 1 & \underline{2} & 3 \\ \overbrace{0}^{\times (-2)} & \overbrace{1}^{\times (-2)} & \overbrace{2}^{\times (-2)} \end{array}\right)\to \left(\begin{array}{cc|c} 1 & 0 & -1 \\ 0 & 1 & 2 \end{array}\right) \\ \therefore (x,y)=(-1,2)

これは掃き出し法とも言われることがある. ガウス・ジョルダン法の計算量は 12O(n3)\frac{1}{2}O(n^3) なので(導出は省略), ガウス・ジョルダン法をわざわざ用いるシーンはあまりない.

ピボッティング

ところで, いま示したガウスの消去法, ガウスジョルダン法の手順は, このままでは困る場合がある. 例えば, 次の線形方程式をガウスの消去法で解いてみると

(127662442218521224335)(1×(2)2×(2)7×(2)6×(2)6×(2)2442218521224335)(127660010101018521224335)(1×(1)2×(1)7×(1)6×(1)6×(1)0010101018521224335)(12766001010100624624335)(1×(2)2×(2)7×(2)6×(2)6×(2)001010100624624335)(127660010101006246001197)(1276600×(60)10×(60)10×(60)10×(60)06246001197) \left(\begin{array}{cccc|c} 1 & 2 & 7 & 6 & 6 \\ 2 & 4 & 4 & 2 & 2 \\ 1 & 8 & 5 & 2 & 12 \\ 2 & 4 & 3 & 3 & 5 \end{array}\right)\to \left(\begin{array}{cccc|c} \overbrace{1}^{\times (-2)} & \overbrace{2}^{\times (-2)} & \overbrace{7}^{\times (-2)} & \overbrace{6}^{\times (-2)} & \overbrace{6}^{\times (-2)} \\ \underline{2} & 4 & 4 & 2 & 2 \\ 1 & 8 & 5 & 2 & 12 \\ 2 & 4 & 3 & 3 & 5 \end{array}\right)\to \left(\begin{array}{cccc|c} 1 & 2 & 7 & 6 & 6 \\ 0 & 0 & -10 & -10 & -10 \\ 1 & 8 & 5 & 2 & 12 \\ 2 & 4 & 3 & 3 & 5 \end{array}\right) \\ \to \left(\begin{array}{cccc|c} \overbrace{1}^{\times (-1)} & \overbrace{2}^{\times (-1)} & \overbrace{7}^{\times (-1)} & \overbrace{6}^{\times (-1)} & \overbrace{6}^{\times (-1)} \\ 0 & 0 & -10 & -10 & -10 \\ \underline{1} & 8 & 5 & 2 & 12 \\ 2 & 4 & 3 & 3 & 5 \end{array}\right)\to \left(\begin{array}{cccc|c} 1 & 2 & 7 & 6 & 6 \\ 0 & 0 & -10 & -10 & -10 \\ 0 & 6 & -2 & -4 & 6 \\ 2 & 4 & 3 & 3 & 5 \end{array}\right)\to \left(\begin{array}{cccc|c} \overbrace{1}^{\times (-2)} & \overbrace{2}^{\times (-2)} & \overbrace{7}^{\times (-2)} & \overbrace{6}^{\times (-2)} & \overbrace{6}^{\times (-2)} \\ 0 & 0 & -10 & -10 & -10 \\ 0 & 6 & -2 & -4 & 6 \\ \underline{2} & 4 & 3 & 3 & 5 \end{array}\right) \\ \to \left(\begin{array}{cccc|c} 1 & 2 & 7 & 6 & 6 \\ 0 & 0 & -10 & -10 & -10 \\ 0 & 6 & -2 & -4 & 6 \\ 0 & 0 & -11 & -9 & -7 \end{array}\right)\to \left(\begin{array}{cccc|c} 1 & 2 & 7 & 6 & 6 \\ 0 & \overbrace{0}^{\times (-\frac{6}{0})} & \overbrace{-10}^{\times (-\frac{6}{0})} & \overbrace{-10}^{\times (-\frac{6}{0})} & \overbrace{-10}^{\times (-\frac{6}{0})} \\ 0 & \underline{6} & -2 & -4 & 6 \\ 0 & 0 & -11 & -9 & -7 \end{array}\right)

というように 00 で割るということが起きてしまうのである. これを防ぐために考えられる方法としては, 掃きだすのに利用する値がその列の中で絶対値最大となるように行を入れ替える. これは, 部分ピボット選択付きガウスの消去法といわれる. ピボットとは, いま述べた掃きだすのに利用する値のことである. 部分ピボット選択といわれる理由は, 入れ替えの操作が行に対してのみ行われるからである. 列に対する入れ替え操作をも含んだ方法は完全ピボット選択といわれるが, 当然それは行基本変形の範疇でないので, そのまま計算を続行して単に右辺ベクトルを取り出せばよいという話ではなくなる. 完全ピボット選択は, 絶対値最大の値の選択の余地が部分ピボット選択よりも当然広がるので, 直感的に, より大きな絶対値の値をピボットとして選択できる確率が上がることは考えられるだろう. しかしながら, このアドバンテージは当然行列に依存したものであり, プログラムの複雑度が上がることに釣り合っていないため, 実際に用いられるようなことはあまりないと思われる.

というわけで, 下記に部分ピボット選択付きガウスの消去法による計算過程を省略することなく書き下したが, とくに面白みもない上に長いので隠しておいた. クリックで展開.

LU 分解

漸く本題の LU 分解(LR 分解, 三角分解)について. 簡単のために式 (1)(1) を使って LU 分解の導出をする. 式 (1)(1) は次の式と同値である.

A(0)(xy)=v where A(0)=(1234),v=(35) A^{(0)}\left(\begin{array}{c}x \\ y\end{array}\right)={\boldsymbol v} \ {\rm where}\ A^{(0)}=\left(\begin{array}{cc}1 & 2 \\ 3 & 4\end{array}\right),{\boldsymbol v}=\left(\begin{array}{c}3\\ 5\end{array}\right)

A(0)1v{A^{(0)}}^{-1}{\boldsymbol v} とすれば (x,y)T(x,y)^T は求まるが, 逆行列の計算はガウスの消去法により 13O(n3)\frac{1}{3}O(n^3) の時間計算量がかかる. 一定の条件下でそれよりも高速に求める方法を考えることとする. いま A(0)A^{(0)} を徐に上三角行列にすることを考えると, ガウスの消去法の前進消去より

A(1)=L(1)A(0)=(1202)A(0)=L(1)1A(1) where L(1)=(1031) A^{(1)}=L^{(1)}A^{(0)}=\left(\begin{array}{cc}1 & 2 \\ 0 & -2\end{array}\right) \leftrightarrow A^{(0)}={L^{(1)}}^{-1}A^{(1)} \ {\rm where}\ L^{(1)}=\left(\begin{array}{cc}1 & 0 \\ -3 & 1\end{array}\right)

従って

L(1)1A(1)(xy)=v {L^{(1)}}^{-1}A^{(1)}\left(\begin{array}{c}x \\ y\end{array}\right)={\boldsymbol v}

ここで, b=A(1)(x,y)T{\boldsymbol b}=A^{(1)}(x,y)^T とおくと, 上の式は L(1)1b=v{L^{(1)}}^{-1}{\boldsymbol b}={\boldsymbol v} と同値であり, この式を用いて b{\boldsymbol b} について解くことができる. まずこの時間計算量を考えるとする. L(1)L^{(1)} は元々前進消去のための行列であり, それは必ず下三角行列である. 正則な下三角行列の逆行列は下三角行列であり(証明略), いま L(1)L^{(1)} が正則であるとする(これが特異となるような場合には後述する PLU 分解が有効)と, その計算は前進代入(上記後退代入の下三角行列バージョンと考えればよい)を実行すればよいので, 時間計算量は 12O(n2) \frac{1}{2}O(n^2)\ \because となる.

その後に A(1)(x,y)T=bA^{(1)}(x,y)^T={\boldsymbol b}(x,y)T(x,y)^T について解くわけであるが, A(1)A^{(1)} は上三角行列であるので, その計算にはガウスの消去法の後退代入を実行すれば良く, 従ってその時間計算量は 12O(n2) \frac{1}{2}O(n^2)\ \because である.

よって, この一連の操作における時間計算量は 13O(n3)\frac{1}{3}O(n^3) であり, 部分ピボットつきガウスの消去法を実行した場合と変わらない.

しかし, LUL U を流用できる(つまり, 共通の A(0)A^{(0)} に対し異なる右辺ベクトル v{\boldsymbol v} から成る連立方程式を解く)とすればどうだろう. この場合, やらなければならない計算は前進代入および後退代入のみなので, 全体の時間計算量は 12O(n2)\frac{1}{2}O(n^2) となり, 先よりも高速に解を得ることができる.

いまの説明では, 式 \(\) において A(0)A^{(0)}L(1)1{L^{(1)}}^{-1}A(1)A^{(1)} に分解したが, これを LU 分解(L=L(1)1,U=A(1)L={L^{(1)}}^{-1},U=A^{(1)})といい, L(i)L^{(i)} が正則ならば, 一般の場合においても同様にしていうことができる.

LU 分解 (外積形式ガウス法)

すべての前進消去の行列 L(i)L^{(i)} が正則ならば ARm×nA\in\mathbb{R}^{m\times n} に対する LU 分解は A=A(0)=LU where L=i=1n1L(i)1,U=A(n1)A=A^{(0)}=L U\ {\rm where}\ L=\prod_{i=1}^{n-1}{L^{(i)}}^{-1}, U=A^{(n-1)}

補足すると, A(0)A^{(0)} に対し n1n-1 回の前進消去をするというのは, L(n1)L(2)L(1)A(0)L^{(n-1)}\cdots L^{(2)}L^{(1)}A^{(0)} ということであり, λ=L(n1)L(2)L(1)\lambda=L^{(n-1)}\cdots L^{(2)}L^{(1)} とおくと λA(0)=U=A(n1)\lambda A^{(0)}=U=A^{(n-1)} だから A(0)=λ1UA^{(0)}=\lambda^{-1}U. ここで逆行列の公式 (XY)1=Y1X1(X Y)^{-1}=Y^{-1} X^{-1} より(証明略)上式となる. 一般論を得たところで, 実際に一つ LU 分解を実践してみることとする.

A(0)=(310612303)(100210101)L(1)(310612303)=(310012013)A(1)(100010011)L(2)A(1)=(310012001)A(2) A^{(0)}= \left(\begin{array}{ccc} 3 & 1 & 0 \\ 6 & 1 & -2 \\ -3 & 0 & 3 \end{array}\right)\to \underbrace{\left(\begin{array}{ccc} 1 & 0 & 0 \\ -2 & 1 & 0 \\ 1 & 0 & 1 \end{array}\right)}_{L^{(1)}} \left(\begin{array}{ccc} 3 & 1 & 0 \\ 6 & 1 & -2 \\ -3 & 0 & 3 \end{array}\right)= \underbrace{ \left(\begin{array}{ccc} 3 & 1 & 0 \\ 0 & -1 & -2 \\ 0 & 1 & 3 \end{array}\right) }_{A^{(1)}} \\ \to \underbrace{ \left(\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 1 & 1 \end{array}\right) }_{L^{(2)}} A^{(1)}= \underbrace{ \left(\begin{array}{ccc} 3 & 1 & 0 \\ 0 & -1 & -2 \\ 0 & 0 & 1 \end{array}\right)}_{A^{(2)}}

より L=(L(2)L(1))1=(100210111),U=A(2)L=(L^{(2)}L^{(1)})^{-1}=\left(\begin{array}{ccc} 1 & 0 & 0 \\ 2 & 1 & 0 \\ -1 & -1 & 1 \end{array}\right),U=A^{(2)} 実際には, すべてを減算で考えることで, (L(2)L(1))1(L^{(2)}L^{(1)})^{-1} の計算は楽に済む(つまり A0=(a1T,a2T,a3T)TA^{0}=({\boldsymbol a_1}^T,{\boldsymbol a_2}^T,{\boldsymbol a_3}^T)^T としたとき 2a1a2,1a1a3,1a2a3\underline{2}{\boldsymbol a_1}-{\boldsymbol a_2}, \underline{-1}{\boldsymbol a_1}-{\boldsymbol a_3}, \underline{-1}{\boldsymbol a_2}-{\boldsymbol a_3} より LL が導けるということ).

この導出過程を見ればなんとなく LU 分解が一意となることは直感的にも納得できるが, 一応証明を与えておく.

定理 1

LU 分解された L,UL,U は一意に決まる

定理 1

正則行列 AA の LU 分解 A=LUA= L U に対して A=L1U1=L2U2L21L1=U2U11A= L_{1}U_{1} = L_{2}U_{2} \leftrightarrow L_{2}^{-1}L_{1} = U_{2}U_{1}^{-1} とおく. LL は元々下三角行列であり下三角行列の逆行列は下三角行列, また下三角行列の積は下三角行列だから L21L1L_{2}^{-1}L_{1} は下三角行列である. UU は元々上三角行列であり上三角行列の逆行列は上三角行列, また上三角行列の積は上三角行列だから U2U11U_{2}U_{1}^{-1} は上三角行列である. 従って, 両行列は上および下三角行列でなければならず, それを満たす唯一の行列は対角行列であり, LL の対角成分は元々 11 であるから L21L1=I=U2U11L_{2}^{-1}L_{1} = I = U_{2}U_{1}^{-1}. 故に L2=L1,U2=U1L_{2}=L_{1}, U_{2}=U_{1}.

次に, 次のような行列に対する LU 分解を考えてみる.

A=(010881220) \begin{aligned} A=\left(\begin{array}{ccc} 0 & 1 & 0 \\ -8 & 8 & 1 \\ 2 & -2 & 0 \end{array}\right) \end{aligned}

見てわかるように, 前進消去の段階で 8÷0-8\div 0 となってしまい計算できない. しかし, これも部分ピボット選択付きガウスの消去法と同様に, 絶対値最大の値がピボットとなるように行を予め入れ替えておけば, 計算が続行できる. そのような手続きのある LU 分解は PLU 分解といわれ, 置換行列 PRm×nP\in\mathbb{R}^{m\times n} をつかって, A=PLUA=P L U とする. 以下 AA をつかって導出してみることとする. a1T{\boldsymbol a_1}^Ta2T{\boldsymbol a_2}^T を入れ替えれば良いので,

(010100001)P(1)A=(881010220)A(1000101401)L(1)A=(8810100014)A(1) \begin{aligned} \underbrace{\left(\begin{array}{ccc} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array}\right)}_{P^{(1)}}A= \underbrace{\left(\begin{array}{ccc} -8 & 8 & 1 \\ 0 & 1 & 0 \\ 2 & -2 & 0 \end{array}\right)}_{A'}\to \underbrace{\left(\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \frac{1}{4} & 0 & 1 \end{array}\right)}_{L^{(1)}}A'= \underbrace{\left(\begin{array}{ccc} -8 & 8 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & \frac{1}{4} \end{array}\right)}_{A'^{(1)}} \end{aligned}

より

L=L(1)1=(1000101401),U=A(1)L = {L^{(1)}}^{-1}=\left(\begin{array}{ccc}1 & 0 & 0 \\ 0 & 1 & 0 \\ -\frac{1}{4} & 0 & 1\end{array}\right),U={A'}^{(1)}

とおくと A=L(1)1A(1)A'={L^{(1)}}^{-1}{A'}^{(1)} だから

P(1)A=LUP^{(1)}A=L U

P(1)P^{(1)} は元々置換行列であるから正則であり, また直行行列でもある. すなわち P=P(1)1=P(1)T{P=P^{(1)}}^{-1}={P^{(1)}}^T とおけて

A=PLU(010881220)=(01010000