ムーア・ペンローズ逆行列
擬似逆行列と行列ノルムを使用して、任意の行列の条件数を定義できる。
条件数が大きい場合、線型連立方程式の最小二乗解を求める問題で、 A {\displaystyle A} の要素の小さな誤差が解の要素の大きな誤差につながるという意味で、悪条件であることを意味する。
一意でない解(劣決定系など)を持つ線型連立方程式 A x = b {\displaystyle Ax=b} では、擬似逆行列を使用して、すべての解の中で最小のユークリッドノルム ‖ x ‖ 2 {\displaystyle \|x\|_{2}} の解を構築できる。
A x = b {\displaystyle Ax=b} ならば、ベクトル z = A + b {\displaystyle z=A^{+}b} は解であり、すべての解に対して ‖ z ‖ 2 ≤ ‖ x ‖ 2 {\displaystyle \|z\|_{2}\leq \|x\|_{2}} が成り立つ。
ユークリッドノルムをフロベニウスノルムに置き換えると、複数右辺ベクトルを持つ連立方程式に簡単に拡張できる。 B ∈ k m × p {\displaystyle B\in \mathbb {k} ^{m\times p}} とすると、次のようになる。
A X = B {\displaystyle AX=B} ならば、行列 Z = A + B {\displaystyle Z=A^{+}B} は解であり、すべての解に対して ‖ Z ‖ F ≤ ‖ X ‖ F {\displaystyle \|Z\|_{\mathrm {F} }\leq \|X\|_{\mathrm {F} }} が成り立つ。
A ∈ k m × n {\displaystyle A\in \mathbb {k} ^{m\times n}} とする。 P = A A + {\displaystyle P=AA^{+}} と Q = A + A {\displaystyle Q=A^{+}A} は直交射影演算子である。つまり、これらはエルミート( P = P ∗ {\displaystyle P=P^{*}} 、 Q = Q ∗ {\displaystyle Q=Q^{*}} )およびべき等( P 2 = P {\displaystyle P^{2}=P} と Q 2 = Q {\displaystyle Q^{2}=Q} )であり、以下の事柄が成り立つ:
P A = A Q = A {\displaystyle PA=AQ=A} かつ A + P = Q A + = A + {\displaystyle A^{+}P=QA^{+}=A^{+}}
P が A の値域への直交射影作用素である(これは、 A ∗ {\displaystyle A^{*}} の核の直交補空間に等しい)。
Q が A ∗ {\displaystyle A^{*}} の値域への直交射影作用素である(これは、 A の核の直交補空間に等しい)。
A ∈ k n × n {\displaystyle A\in \mathbb {k} ^{n\times n}} はエルミートかつべき等であり(正射影を表す場合かつその場合に限って真)、任意の行列 B ∈ k m × n {\displaystyle B\in \mathbb {k} ^{m\times n}} に対して以下の等式が成り立つ。
これは、行列 C = B A {\displaystyle C=BA} 、 D = A ( B A ) + {\displaystyle D=A(BA)^{+}} を定義することで証明できる。 A がエルミートでべき等であるという、擬似逆行列の特徴を満たすことを確認することにより、 D が実際に C の擬似逆行列になっていることを確認すればよい。 最後の特徴から、 A ∈ k n × n {\displaystyle A\in \mathbb {k} ^{n\times n}} がエルミートかつべき等であるならば、任意の行列 A ∈ k n × m {\displaystyle A\in \mathbb {k} ^{n\times m}} に対して以下の式が成り立つ。
最後に、 A は直交射影行列であるならば、その擬似逆行列は元の行列と自明に一致する。つまり、 A + = A {\displaystyle A^{+}=A} 。
A ∈ k m × n {\displaystyle A\in \mathbb {k} ^{m\times n}} を係数行列とする以下の線型連立方程式が複数の解を持つとする。
するとすべての解は、任意のベクトル w ∈ k n {\displaystyle w\in \mathbb {k} ^{n}} に対して以下の式で与えられる。
解は、 A A + b = b {\displaystyle AA^{+}b=b} のとき、またそのときに限り存在する。後者の場合、解は、 A {\displaystyle A} が列フルランク( [ I n − A + A ] {\displaystyle [I_{n}-A^{+}A]} が零行列)のとき、またそのときに限り一意に定まる。解は存在するが A {\displaystyle A} が列フルランクでないならば、不定方程式(英語版)となり、その無数のすべての解は最後の方程式によって与えられる。
可逆行列の場合、擬似逆行列は通常の逆行列に等しいため、以下では非可逆行列の例のみを扱う。
A = ( 0 0 0 0 ) {\displaystyle A={\begin{pmatrix}0&0\\0&0\end{pmatrix}}} について、疑似逆行列は A + = ( 0 0 0 0 ) {\displaystyle A^{+}={\begin{pmatrix}0&0\\0&0\end{pmatrix}}} である(一般に、零行列の疑似逆行列は元の行列の転置となる)。この疑似逆行列の一意性は、零行列の積は常に零行列であるため、条件 A + = A + A A + {\displaystyle A^{+}=A^{+}AA^{+}} からわかる。
A = ( 1 0 1 0 ) {\displaystyle A={\begin{pmatrix}1&0\\1&0\end{pmatrix}}} について、疑似逆行列は A + = ( 1 2 1 2 0 0 ) {\displaystyle A^{+}={\begin{pmatrix}{\frac {1}{2}}&{\frac {1}{2}}\\0&0\end{pmatrix}}} である。 実際、 A A + = ( 1 2 1 2 1 2 1 2 ) {\displaystyle A\,A^{+}={\begin{pmatrix}{\frac {1}{2}}&{\frac {1}{2}}\\{\frac {1}{2}}&{\frac {1}{2}}\end{pmatrix}}} であり、したがって A A + A = ( 1 0 1 0 ) = A {\displaystyle A\,A^{+}A={\begin{pmatrix}1&0\\1&0\end{pmatrix}}=A} である。
SVD、QR、および後方代入の高品質な実装は、 LAPACKなどの標準ライブラリで利用できる。 SVDの独自実装の作成には、高度な数値計算の専門知識を必要とする。ただし、並列コンピューティングや組み込みコンピューティングなどの特殊な状況では、QRによる代替実装、または明示的な逆行列の使用が望ましい場合があり、独自実装は避けられない場合がある。
PythonパッケージNumPyでは、関数matrix.Iとlinalg.pinvを利用できる。pinvはSVDベースのアルゴリズムを使用する。 SciPyでは、最小二乗ソルバーを使用する関数scipy.linalg.pinvを利用できる。
RのMASSパッケージでは、 ginv関数でムーア・ペンローズ逆行列の計算が行える。 ginv関数は、ベースRパッケージのsvd関数による特異値分解を使用して擬似逆行列を計算する。他に、pracmaパッケージで利用可能なpinv関数を使用する方法もある。
Octaveプログラミング言語は、標準パッケージ関数pinvおよびpseudo_inverse()メソッドを介して擬似逆行列を計算できる。
Julia(プログラミング言語)では、標準ライブラリのLinearAlgebraパッケージが、特異値分解を介して実装されたムーア・ペンローズ逆行列の実装 pinv() を提供する。