ムーア・ペンローズ逆行列
逆行列の乗算は、複数右辺ベクトルを持つ連立方程式を解くことで簡単に行える。
これは、前進代入と後退代入で解くことができる。 コレスキー分解の代わりに QR分解 A = Q R {\displaystyle A=QR} を用いることで、 A ∗ A {\displaystyle A^{*}A} を明示的に構築せずに計算できる。ここで、 Q {\displaystyle Q} は正規直交列を持ち、 Q ∗ Q = I {\displaystyle Q^{*}Q=I} 、そして R {\displaystyle R} 上三角行列である。このとき
それでのコレスキー因子である 。
行フルランクの場合は、式 A + = A ∗ ( A A ∗ ) − 1 {\displaystyle A^{+}=A^{*}\left(AA^{*}\right)^{-1}} を用い、 A {\displaystyle A} と A ∗ {\displaystyle A^{*}} を入れ替えた同様の議論で対処可能である。
計算上単純で正確な擬似逆行列を計算する方法は、特異値分解である。 A = U Σ V ∗ {\displaystyle A=U\Sigma V^{*}} を A {\displaystyle A} の特異値分解とすると、 A + = V Σ + U ∗ {\displaystyle A^{+}=V\Sigma ^{+}U^{*}} となる。 Σ {\displaystyle \Sigma } のような長方対角行列の場合、対角成分の各非ゼロ要素は逆数を取り、ゼロをそのままにして、行列を転置することにより、擬似逆行列が得られる。数値計算では、許容誤差よりも大きい要素のみが非ゼロと見なされ、他の要素はゼロに置き換えられる。たとえば、 MATLABやGNUOctaveのpinv関数の場合、許容誤差は t = ε⋅max(m, n)⋅max(Σ) で与えられる。ここで、εは計算機イプシロンである。
この方法の計算コストは、SVDの計算コストが支配的である。これは、最先端の実装(LAPACKなど)が使用されている場合でも、行列同士の乗算よりも数倍重い。
上記の手順は、擬似逆行列の計算が連続演算ではない理由を示している。元の行列 A {\displaystyle A} が特異値0(上記行列 Σ {\displaystyle \Sigma } の対角成分)を持つ場合、 A {\displaystyle A} のわずかな変更によってこのゼロが小さな正の数に変わる可能性があり、それによって、小さな数の逆数を求める必要が生じ、擬似逆行列に大きな影響を与えうる。