うさぎでもわかる線形代数 応用編第8羽 擬似逆行列 (一般化逆行列)
連立方程式\[\left\ < \begin\ \ x - \ \ y & = 1 \\ -x +2y & = 1 \end \right.\]は、行列を用いて\[\left( \begin 1 & -1 \\ -1 & 2 \end \right) \left( \begin x \\ y \end \right) = \left( \begin 1 \\ 1 \end \right)\]と書き直すことができる。
係数行列\[A = \left( \begin 1 & -1 \\ -1 & 2 \end \right)\]の逆行列を求めることで、連立方程式を解きなさい。
係数行列 \( A \)、ベクトル \( \vec \) および解ベクトル \( \vec \) を\[A = \left( \begin 1 & -1 \\ -1 & 2 \end \right), \ \ \ \vec = \left( \begin x \\ y \end \right), \ \ \ \vec = \left( \begin 1 \\ 1 \end \right)\]とおくことで、\[\beginA \vec & = \vec \\ A^ A \vec & = A^ \vec \ \ \left( \mathrm \ A^ \ \mathrm \right) \\ E \vec & = A^ \vec \\ \vec & = A^ \vec\end\]と逆行列 \( A^ \) を用いて連立方程式が計算できる形となります。
よって、\[\beginA^ & = \frac \left( \begin 2 & 1 \\ 1 & 1 \end \right) \\ & = \left( \begin 2 & 1 \\ 1 & 1 \end \right)\end\]となるので、\[\begin\vec & = \left( \begin 2 & 1 \\ 1 & 1 \end \right) \left( \begin 1 \\ 1 \end \right)\\ & = \left( \begin 3 \\ 2 \end \right)\\ & = \left( \begin x \\ y \end \right)\end\]と連立方程式を得る。
連立方程式 \( A \vec = \vec \) の係数行列 \( A \) が正方行列、かつ正則であるとき、\( \vec = A^ \vec \) で解を求めることができる。
1. 擬似逆行列とは
\( A \) が正方行列ではない場合、逆行列 \( A^ \) が定義されないため、 \(A^ \vec = \vec\) を用いた連立方程式の計算ができません。
そこで、 無理やり正方行列を作って 逆行列を計算できる形にしましょう。
連立方程式の形は \( A \vec = \vec \) ですね。この両辺に \( A^ \) を掛けます。つまり、\[A^ A \vec = A^ \vec\]ですね。
すると、\( A^ A \) は必ず正方行列となるため [1] \( A \) を \( m \) 行 \( n \) 列とすると、\( A^ \) を \( n \) 行 \( m \) 列となるため、\( A^ A \) は \( n \) 行 \( n \) 列になりますね。 、正則であれば逆行列 \( ( A^ A )^ \) を持ちますね。そのため、\[\beginA^ A \vec & = A^ \vec \\( A^ A )^ (A^ A) \vec & = (A^ A )^ A^ \vec \\ \vec & = \underbrace < (A^A )^ A^ >_ \vec\end\]とすることで、正方行列掃き出し法を使わずに行列を用いた連立方程式を実現できますね!
ここで、1つ上の式に出てきた \( (A^ A )^ A^ \) を、\( A^+ \) とおくことで\[\vec = A^+ \vec\]と あたかも逆行列を解いたかのような形 にすることができます。
この \( A^+ \) のことを 擬似逆行列 と呼びます。(疑似逆行列・一般化逆行列・一般逆行列と表記されることもあり)
擬似逆行列の定義と性質\( m \) 行 \( n \) 列の行列 \( A \) の擬似逆行列(疑似逆行列・一般化逆行列・一般逆行列)は、次のように計算でき、\( A^+ \) と表記される。\[A^+ = (A^ A )^ A^\]
- 擬似逆行列 \( A^+ \) は \( n \) 行 \( m \) 列である。
- 擬似逆行列 \( A^+ \) は、\( A^ A \) が正則であるときのみ計算できる。(\( A^A \) が正則であることは、\( \mathrm \ A = n \) を確認すればOK)
まず、擬似逆行列 \( A^+ \) のサイズですが、
- \( A^ \) は \( n \) 行 \( m \) 列
- \( A^ A \) は \( n \) 行 \( n \) 列
- \( (A^ A)^ \) は \( n \) 行 \( n \) 列
となるため、\( (A^ A)^ A^ \) は \( n \) 行 \( m \) 列となりますね。
また、擬似逆行列 \( A^+ \) は、\( A^ A \) の逆行列を計算するため、\( n \) 次正方行列である \( A^ A \) が正則、つまり \( \mathrm \ A^ A = n \) のときのみ擬似逆行列が計算できます。
ここで、\( A \) と \( A^ A \) の行列の階数の関係として\[\mathrm \ A = \mathrm \ A^ A\]が成り立つので [2] \( A \) と \( A^ A \) ともに列数が \( n \) … Continue reading 、\( \mathrm \ A = n \) を確認するだけで \( \mathrm \ A^ A = n \) であることも同時に確認できます。
2. 擬似逆行列を計算してみよう
次の行列\[A = \left( \begin 1 & -1 \\ -1 & 2 \\ 2 & -1 \end \right)\]の擬似逆行列 \( A^+ \) を計算しなさい。
[解説1]
[Step1] \( A^ A \) の計算
\[\begin A^ A & = \left( \begin 1 & -1 & 2 \\ -1 & 2 & -1 \end \right) \left( \begin 1 & -1 \\ -1 & 2 \\ 2 & -1 \end \right)\\ & = \left( \begin 1 + 1 + 4 & -1 - 2 - 2 \\ -1 - 2 -2 & 1 + 4 + 1 \end \right)\\ & = \left( \begin 6 & -5 \\ -5 & 6 \end \right)\end\]※ \( A^ A \) は必ず実対称行列になります。検算に使いましょう。
\[\beginA^+ & = (A^ A)^ A^ \\ & = \frac \left( \begin 6 & 5 \\ 5 & 6 \end \right) \left( \begin 1 & -1 & 2 \\ -1 & 2 & -1 \end \right) \\ & = \frac \left( \begin 6 - 5 & -6 + 10 & 12 - 5 \\ 5 - 6 & -5 + 12 & 10 - 6 \end \right) \\ & = \frac \left( \begin 1 & 4 & 7 \\ -1 & 7 & 4 \end \right) \end\]
となるので、擬似逆行列は\[A^+ = \frac \left( \begin 1 & 4 & 7 \\ -1 & 7 & 4 \end \right) \]と計算できる。
3. 擬似逆行列で連立方程式を解いてみよう
掃き出し法を使わずに連立方程式\[\left\ < \begin\ \ x - \ \ y & = 1 \\ -x +2y & = 1 \\ 2 x - \ \ y & = 4 \end \right.\]を計算しなさい。
[解説2]
まずは連立方程式を行列に書き換え、\( A \vec = \vec \) の形にする。\[\left( \begin 1 & -1 \\ -1 & 2 \\ 2 & -1 \end \right) \left( \begin x \\ y \end \right) = \left( \begin 1 \\ 1 \\ 4 \end \right)\]
しかし、\( A \) は正方行列ではないため、逆行列 \( A^ \) を計算できない。
ここで、\( A \) の擬似逆行列 \( A^+ \) は例題1より\[A^+ = \frac \left( \begin 1 & 4 & 7 \\ -1 & 7 & 4 \end \right) \]である。
よって、\[\beginA^+ \vec & = \frac \left( \begin 1 & 4 & 7 \\ -1 & 7 & 4 \end \right) \left( \begin 1 \\ 1 \\ 4 \end \right) \\ & =\frac \left( \begin 1 +4 + 28 \\ -1 + 7 + 16 \end \right) \\ & =\frac \left( \begin 33 \\ 22 \end \right)\\ & = \left( \begin 3 \\ 2 \end \right)\end\]となる。
実際に連立方程式に \( \textcolor \), \( \textcolor \) を代入すると、\[\left\ < \begin\ \ \textcolor - \ \ \textcolor = \ \ \ \ \textcolor - \ \ \ \ \textcolor & = 1 \\ -\textcolor +2 \textcolor = - \textcolor + 2 \cdot \textcolor & = 1 \\ 2 \textcolor - \ \ \textcolor = \ 2 \cdot \textcolor - \ \ \textcolor & = 4 \end \right.\]と確かに正しい解が求められていますね。
4. 解がない連立方程式を解こうとすると…?
例題2で解いた連立方程式を少し変えて\[\left\ < \begin\ \ x - \ \ y & = 1 \\ -x +2y & = 1 \\ 2 x - \ \ y & = \textcolor \end \right.\]としてみましょう。( 赤色部分 が変わったところ)
すると、この連立方程式は解をもたなくなりますね。実際に掃き出し法をしてみても\[\begin(A|\vec) & = \left( \begin 1 & -1 & 1 \\ -1 & 2 & 1 \\ 2 & -1 & 5 \end \right) \\ & = \left( \begin 1 & -1 & 1 \\ 0 & 1 & 2 \\ 0 & 1 & 3 \end \right) \\ & = \left( \begin 1 & -1 & 1 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end \right) \end\]となり、\( 0 = 1 \) というありえない形が出てきますし、行列の階数を見ても、\( \mathrm \ A < \mathrm\ (A | \vec) \) となっています。
しかし、この連立方程式を擬似逆行列で解こうとすると [3] 連立方程式の左辺(係数)は例題2と変えていないため、擬似逆行列は例題1, 2と同じです。 、\[\begin\vec & = A^+ \vec\\ & = \frac \left( \begin 1 & 4 & 7 \\ -1 & 7 & 4 \end \right) \left( \begin 1 \\ 1 \\ 5 \end \right) \\ & = \frac \left( \begin 40 \\ 26 \end \right) \end\]となり、\[\left\< \begin \textcolor> \\ \textcolor> \end \right.\]と、あたかも解があるかのように計算ができてしまいます。
実は、擬似逆行列で 解がない連立方程式を計算する場合、最も連立方程式の右辺に近くなるような解(それっぽい解)を計算してくれる のです。
この仕組みは 最小2乗法 と呼ばれますが、どうしてそれっぽい解を計算してくれるのかについては、次の応用編第09羽で説明しましょう。
5. 擬似逆行列を用いた連立方程式プログラム
実際に例題2の連立方程式\[\left\ < \begin\ \ x - \ \ y & = 1 \\ -x +2y & = 1 \\ 2 x - \ \ y & = 4 \end \right.\]を計算するPythonとMATLABのプログラムを見てみましょう。
Pythonのプログラム8行目で連立方程式を計算しています。 np.linagle.pinv(A) で擬似逆行列 \( A^+ \) が計算できます。
import numpy as np # numpyを用いた行列計算に必要 ## 連立方程式の準備 A = np.array([[1, -1],[-1, 2],[2, -1]]) # 左辺 (係数行列) b = np.array([[1],[1],[4]]) # 右辺 ## 計算 x = np.matmul(np.linalg.pinv(A),b) # np.linalg.pinv(A) = np.matmul(np.linalg.inv(np.matmul(A.T,A)),A.T) print(x) # 解ベクトル x[実行結果]
MATLABのプログラム6行目で連立方程式を計算しています。 pinv(A) で擬似逆行列 \( A^+ \) が計算できます。
%% 連立方程式の準備 A = [1 -1; -1 2; 2 -1]; % 連立方程式の左辺の係数 (係数行列) b = [1;1;4]; % 連立方程式の右辺 %% 計算 x = pinv(A) * b % 解ベクトルx % pinv(A) = inv(A'*A) * A' に等しい[実行結果]
x = 3.0000 2.00006. 練習問題
連立方程式\[\left\ < \begin\ \ x + 2 y & = 2 \\ \ \ x +4y & = 0 \\ 2 x + 5 y & = 3 \end \right.\]を計算したい。
(1) 行列\[A = \left( \begin 1 & 2 \\ 1 & 4 \\ 2 & 5 \end \right)\]の擬似逆行列 \( A^+ \) を求めなさい。(2) (1)を用いて連立方程式の解を求めなさい。
7. 練習問題の答え
(1) 擬似逆行列の計算\[\beginA^ A & = \left( \begin 1 & 1 & 2 \\ 2 & 4 & 5 \end \right) \left( \begin 1 & 2 \\ 1 & 4 \\ 2 & 5 \end \right)\\ & = \left( \begin 1 + 1 + 4 & 2 + 4 + 10 \\ 2 + 4 + 10 & 4 + 16 + 25 \end \right)\\ & = \left( \begin 6 & 16 \\ 16 & 45 \end \right)\end\]
\[\begin(A^ A)^ & = \frac \left( \begin 45 & -16 \\ -16 & 6 \end \right)\\ & = \frac \left( \begin 45 & -16 \\ -16 & 6 \end \right)\\ & = \frac \left( \begin 45 & -16 \\ -16 & 6 \end \right)\end\]と計算できるので、擬似逆行列 \( A^+ \) を\(\[\beginA^+ & = (A^ A)^ A^ \\ & = \frac \left( \begin 45 & -16 \\ -16 & 6 \end \right) \left( \begin 1 & 1 & 2 \\ 2 & 4 & 5 \end \right) \\ & = \frac \left( \begin 45 - 32 & 45 - 64 & 90 - 80 \\ -16+12 & -16 + 24 & -32 + 30 \end \right) \\ & = \frac \left( \begin 13 & -19 & 10 \\ -4 & 8 & -2 \end \right) \end\]と計算できる。
(2) 擬似逆行列を用いた連立方程式の解の計算まずは連立方程式を行列に書き換え、\( A \vec = \vec \) の形にする。\[\left( \begin 1 & 2 \\ 1 & 4 \\ 2 & 5 \end \right) \left( \begin x \\ y \end \right) = \left( \begin 2 \\ 0 \\ 3 \end \right)\]
このとき、解 \( \vec \) は \( \vec = A^+ \vec \) で計算できる。
よって、\[\begin\vec & = A^+ \vec\\ & = \frac \left( \begin 13 & -19 & 10 \\ -4 & 8 & -2 \end \right) \left( \begin 2 \\ 0 \\ 3 \end \right)\\ & = \frac \left( \begin 26 + 0 + 30 \\ -8 + 0 - 6 \end \right)\\ & = \frac \left( \begin 56 \\ -14 \end \right)\\ & = \left( \begin 4 \\ -1 \end \right)\\ & = \left( \begin x \\ y \end \right)\end\]となるため、\( x = 4 \), \( y = 1 \) と解を求められる。
8. さいごに
注釈 ↑ 1 \( A \) を \( m \) 行 \( n \) 列とすると、\( A^ \) を \( n \) 行 \( m \) 列となるため、\( A^ A \) は \( n \) 行 \( n \) 列になりますね。 ↑ 2 \( A \) と \( A^ A \) ともに列数が \( n \) なので、2つの行列の核空間が等しくなることを示すことで2つの行列の階数が等しくなることを確認できます。 ↑ 3 連立方程式の左辺(係数)は例題2と変えていないため、擬似逆行列は例題1, 2と同じです。 公開日: 2022年5月21日 更新日: 2024年7月31日 この記事を書いた人 コメント一覧 コメントはありません。 関連記事 うさぎでもわかる信号処理 番外編 ブロック図(ブロック線図)の読み方・書き方 【CG・CV入門】拡散反射と鏡面反射の特徴 10日で完成! うさぎでもわかる統計的な推測 8日目 イカサマを見抜け! 仮説検定のいろは うさぎでもわかる解析 Part24 変数変換を用いた2重積分の求め方・ヤコビアン 【確率】1時間でマスター! 覚えておくべき5つの法則・公式 うさぎでもわかる解析 Part17 接平面・法線の方程式 1時間で要点チェック! 1年後期線形代数うさぎノート 線形代数 固有値を素早く・正確に求める2つの方法(期末試験・数検1級・編入試験・院試向け) うさぎでもわかる信号処理 番外編 ブロック図(ブロック線図)の読み方・書き方 うさぎでもわかる線形代数 応用編第9羽 行列を使って最小2乗法を解いてみよう!カテゴリー
各種便利ツール・問い合わせ- 【完全無料】離散数学演習ツール・計算機まとめ
- 【ハッセ図】上界/下界・最大元/最小元・極大元/極小元・上限(最小上界)/下限(最大下界) 判定ツール
- 【ハッセ図】述語論理(∀・∃)真偽判定ツール
- 【離散数学】べき集合 2^A・P(A) 自動計算&全列挙ツール
- 【離散数学】真理値表 自動作成ツール(途中式あり)
- 【離散数学】集合の「∈・⊆」真偽チェッカー(答え合わせ用)
- 【離散数学テスト対策】真理値表の穴埋めガチ演習ツール
- 【離散数学テスト対策】集合の「∈・⊆」ガチ演習! 弱点分析つき○×ドリル
目次
- [復習] 逆行列を用いた連立方程式の計算
- 1. 擬似逆行列とは
- 2. 擬似逆行列を計算してみよう
- 3. 擬似逆行列で連立方程式を解いてみよう
- 4. 解がない連立方程式を解こうとすると…?
- 5. 擬似逆行列を用いた連立方程式プログラム
- Pythonのプログラム
- MATLABのプログラム
- (1) 擬似逆行列の計算
- (2) 擬似逆行列を用いた連立方程式の解の計算
工業大学生ももやまのうさぎ塾 (Momousagi Academy)
コンピュータグラフィックス コンピュータビジョン- [復習] 逆行列を用いた連立方程式の計算
- 1. 擬似逆行列とは
- 2. 擬似逆行列を計算してみよう
- 3. 擬似逆行列で連立方程式を解いてみよう
- 4. 解がない連立方程式を解こうとすると…?
- 5. 擬似逆行列を用いた連立方程式プログラム
- Pythonのプログラム
- MATLABのプログラム
- (1) 擬似逆行列の計算
- (2) 擬似逆行列を用いた連立方程式の解の計算