Edited at

やっぱり線形代数は必要 #7 逆問題を解く(1)

プログラミングのための線形代数 平岡 和幸(著), 堀 玄(著)オーム社」をまとめています。が、大学数学はほぼ独学なので、だいぶゆるふわ理解になると思います。どうぞご了承ください。間違っていたらぜひ指摘してください。

前の記事←→次の記事

今回から2章に入ります。

2章では、結果$y$から原因$x$を求める「逆問題」に焦点を当て、これを数式でどう扱うかを考えながら、線形代数の知識を学んでいきます(ex. 劣化した画像(=結果)を元に元画像(=原因)を求める、など)1

逆問題は、普通は$y = Ax + ($ノイズ$)$として表されるのですが、簡単のために、まずは$y = Ax$で考えます。


1. 行列が正則行列のときのいろいろな計算の仕方


1.1 行列が正則行列のときの、逆問題の解き方

逆問題$y=Ax$を解くとき、$A$が正則行列(「逆行列が存在する正方行列」を正則行列と呼ぶそうです)なら、「ブロック行列にして、連立方程式と同じやり方で解く」方法(筆算法)を使います。$A$が正則行列出ない場合は、また次回以降にやります。

A = \left(

\begin{matrix}
2 & 3 & 3 \\
3 & 4 & 2 \\
-2 & -2 & 3
\end{matrix}
\right),
y =
\left(
\begin{matrix}
9 \\ 9 \\ 2
\end{matrix}
\right)

この$A, \boldsymbol{y}$に対して、$A\boldsymbol{x}=\boldsymbol{y}$となる$\boldsymbol{x}={x_1, x_2, x_3}^T$を求める逆問題を考えます。$A\boldsymbol{x} = \boldsymbol{y}$は、以下のように3次連立方程式に置き換えられます。

2x_1 + 3x_2 + 3x_3 = 9 \\

3x_1 + 4x_2 + 2x_3 = 9 \\
-2x_1 + -2x_2 + 3x_3 = 9 \\

3次連立方程式であれば中学で習ったように、1行目を$x_1 = -\frac{3}{2}x_2 - \frac{3}{2}x_3 + \frac{9}{2}$のように変形して、2行目に代入して$x_1$を消去して、...と地道に解きます。


行列を使って解く場合は、ブロック行列を使って考えていきます。

\left(

\begin{array}{ccc|c}
2 & 3 & 3 & 9 \\
3 & 4 & 2 & 9 \\
-2 & -2 & 3 & 2 \\
\end{array}
\right)
\left(
\begin{matrix}
x_1 \\ x_2 \\ x_3 \\
\hline
-1
\end{matrix}
\right)
=
\left(
\begin{matrix}
0 \\ 0 \\ 0
\end{matrix}
\right)

結論から言ってしまうと、以下の形になるように、行列の左側のブロックを変形していきます。そうすると、下の式の$(?_1, ?_2, ?_3)^T$が求めたい解になります。

\left(

\begin{array}{ccc|c}
1 & 0 & 0 & ?_1 \\
0 & 1 & 0 & ?_2 \\
0 & 0 & 1 & ?_3 \\
\end{array}
\right)
\left(
\begin{matrix}
x_1 \\ x_2 \\ x_3 \\
\hline
-1
\end{matrix}
\right)
=
\left(
\begin{matrix}
0 \\ 0 \\ 0
\end{matrix}
\right)

なぜ上のような形を目指して変形するかというと、上の式を展開すると、下のように$x_1, x_2, x_3$を求めるような連立方程式として表せるからです。

\left\{

\begin{align}
x_1 + 0 + 0 \, - \, ?_1 &= 0 \\
0 + x_2 + 0 \, - \, ?_2 &= 0 \\
0 + 0 + x_3 \, - \, ?_3 &= 0
\end{align}
\right.
\Leftrightarrow
\left\{
\begin{array}{ll}
x_1 = \, ?_1 \\
x_2 = \, ?_2 \\
x_3 = \, ?_3
\end{array}
\right.

変形には、


  • 1) ある行を定数倍する

  • 2) ある行の定数倍を別の行に加える

  • 3) ある行と別の行を入れ替える(pivotingというらしい)


の手法を使います(行列の線形性より)。実際に計算していきます。

Picture1.png

改めてまとめると、

\begin{align}

\left(
\begin{array}{ccc|c}
2 & 3 & 3 & 9 \\
3 & 4 & 2 & 9 \\
-2 & -2 & 3 & 2 \\
\end{array}
\right)
\left(
\begin{matrix}
x_1 \\ x_2 \\ x_3 \\
\hline
-1
\end{matrix}
\right)
&=
\left(
\begin{matrix}
0 \\ 0 \\ 0
\end{matrix}
\right)
\\ \Leftrightarrow
\left(
\begin{array}{c|c}
A & \boldsymbol{y}
\end{array}
\right)
\left(
\begin{matrix}
\boldsymbol{x} \\
\hline
-1
\end{matrix}
\right)
&=
\boldsymbol{o}
\end{align}

を変形して

\begin{align}

\left(
\begin{array}{ccc|c}
1 & 0 & 0 & ?_1 \\
0 & 1 & 0 & ?_2 \\
0 & 0 & 1 & ?_3 \\
\end{array}
\right)
\left(
\begin{matrix}
x_1 \\ x_2 \\ x_3 \\
\hline
-1
\end{matrix}
\right)
&=
\left(
\begin{matrix}
0 \\ 0 \\ 0
\end{matrix}
\right)
\\ \Leftrightarrow
\left(
\begin{array}{c|c}
I & \boldsymbol{s}
\end{array}
\right)
\left(
\begin{matrix}
\boldsymbol{x} \\
\hline
-1
\end{matrix}
\right)
&=
\boldsymbol{o}
\end{align}

とできれば、$\boldsymbol{s}$の箇所に解が現れる。「$\boldsymbol{y}=A\boldsymbol{x}$で、$\boldsymbol{y}$が分かっているときに$\boldsymbol{x}$を求める」逆問題が解けたことになる。


1.2 行列が正則行列のときの、逆行列の求め方

1.1では、逆問題の解き方を見ていきました。今度は、逆行列の求め方を見ていきます。

#6で余因子行列を使った逆行列の定義を紹介しましたが、手間が多くて大変なので、手計算にしてもコンピュータにしても別の方法を使うべきらしいです。そしてその別の方法では、先ほどの1.1を応用した方法が役に立つそうです(コンピュータで逆行列を求めるときのやり方は3章で扱うそう)。みていきます。

以下の行列$A$の逆行列$A^{-1}$を求めます。

A= 

\left(
\begin{matrix}
2 & 3 & 3 \\
3 & 4 & 2 \\
-2 & -2 & 3
\end{matrix}
\right)

まず、右側に単位行列$I$をくっつけて、$(A|I)$とします(なぜくっつけるかの説明はありましたが小難しいので、心頭滅却して、とにかくくっつけるのだと考えることにしました...)。

次に、$(A|I)$の左側を、単位行列$I$に変換するよう変形していきます。結果、$(I|A^{-1})$のように、右側に求めたい逆行列$A^{-1}$が現れます(えぇ...という感じですがまあそうなんだろうと心頭滅却することにしました)。

IMG_0086 copy 2.PNG

結果の右側に出てくるのが、求めたい$A^{-1}$となります。

実際に、求められた

A^{-1} = 

\left(
\begin{matrix}
-16 & 15 & 6 \\
13 & -12 & -5 \\
-2 & 2 & 1
\end{matrix}
\right)

を$A$にかけてみると、単位行列$I$になることが確認できます。


1.3 基本変形(1.1と1.2でやったことのまとめ)

繰り返しになりますが、1.1逆問題を解く、1.2逆行列を求める の操作では、どちらも以下のような行列計算方法を使いました。


  • 1) ある行を定数倍する

  • 2) ある行の定数倍を別の行に加える

  • 3) ある行と別の行を入れ替える


これら1)~3)は、どれも「行列をかける」という操作で表現できます。例として、

A = 

\left(
\begin{matrix}
2 & 3 & 3 & 9\\
3 & 4 & 2 & 9\\
-2 & -2 & 3 & 2
\end{matrix}
\right)

上の行列$A$に対して、具体例を示します。


  • 「1)ある行を定数倍する」の具体例 : 「第3行を5倍する」

    → 言い換えると「単位行列の$(3,3)$成分を5にした行列$Q_3(5)$を左からかける」

\begin{align}

Q_3(5) &=
\left(
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & \fbox{5}
\end{matrix}
\right)
\\
Q_3(5)A &=
\left(
\begin{matrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & \fbox{5}
\end{matrix}
\right)
\left(
\begin{matrix}
2 & 3 & 3 & 9\\
3 & 4 & 2 & 9\\
\fbox{-2} & \fbox{-2} & \fbox{3} & \fbox{2}
\end{matrix}
\right)
\\ &=
\left(
\begin{matrix}
2 & 3 & 3 & 9\\
3 & 4 & 2 & 9\\
\fbox{-10} & \fbox{-10} & \fbox{15} & \fbox{10}
\end{matrix}
\right)
\end{align}


  • 「2)ある行の定数倍を別の行に加える」の具体例 : 「第1行の10倍を第2行に加える」

    → 言い換えると「単位行列の$(2,1)$成分を10にした行列$R_{2,1}(10)$を左からかける」

\begin{align}

R_{2,1}(10) &=
\left(
\begin{matrix}
1 & 0 & 0 \\
\fbox{10} & 1 & 0 \\
0 & 0 & 1
\end{matrix}
\right)
\\
R_{2,1}(10)A &=
\left(
\begin{matrix}
1 & 0 & 0 \\
\fbox{10} & 1 & 0 \\
0 & 0 & 1
\end{matrix}
\right)
\left(
\begin{matrix}
\fbox{2} & \fbox{3} & \fbox{3} & \fbox{9}\\
3 & 4 & 2 & 9\\
-2 & -2 & 3 & 2
\end{matrix}
\right)
\\ &=
\left(
\begin{matrix}
2 & 3 & 3 & 9\\
\fbox{23} & \fbox{34} & \fbox{32} & \fbox{99}\\
-2 & -2 & 3 & 2
\end{matrix}
\right)
\end{align}


  • 「3)ある行と別の行を入れ替える」の具体例 : 「第1行と第3行を入れ替える」

    → 言い換えると「単位行列の1行目と3行目を入れ替えた行列$S_{1,3}$を左からかける」

\begin{align}

S_{1,3} &=
\left(
\begin{matrix}
0 & 0 & \fbox{1} \\
0 & 1 & 0 \\
\fbox{1} & 0 & 0
\end{matrix}
\right)
\\
S_{1,3}A &=
\left(
\begin{matrix}
0 & 0 & \fbox{1} \\
0 & 1 & 0 \\
\fbox{1} & 0 & 0
\end{matrix}
\right)
\left(
\begin{matrix}
\fbox{2} & \fbox{3} & \fbox{3} & \fbox{9}\\
3 & 4 & 2 & 9\\
\fbox{-2} & \fbox{-2} & \fbox{3} & \fbox{2}
\end{matrix}
\right)
\\ &=
\left(
\begin{matrix}
\fbox{-2} & \fbox{-2} & \fbox{3} & \fbox{2} \\
3 & 4 & 2 & 9\\
\fbox{2} & \fbox{3} & \fbox{3} & \fbox{9}\\
\end{matrix}
\right)
\end{align}

このように、$Q_i(c), R_{i,j}(c), S_{i,j}$のような、特殊な形の正方行列を左からかけていく操作を、左基本変形と呼びます2


今後の予定





  1. 原因$x$が分かっているときにどんな結果$y$になるかを求めるのは、順問題と呼ばれる。 



  2. 「行列をかける」で表す前の操作は、「筆算法」と呼びます。