連立方程式を行列で解いてみる。

まずは簡単な方程式から

簡単な問題を使って、行列形式の方程式の立て方と解き方を解説していきます。

問題:つるとかめがいます。頭は全部で300あります。脚は全部で1000あります。つるとかめはいったいそれぞれどれくらいいたでしょう?

単純な連立方程式の例ですが、今回はこれを行列を使って解くことにします。
つるの頭は1羽につき1つ。かめの頭は1頭につき1つ。つるの脚は1羽につき2つ。かめの脚は1頭につき4つ。まずはこの問題から、普通に連立方程式を作る方法を考えていきましょう。

つるの数をa羽とする。かめの数をb頭とする。
式①           a+b=300
式②           2a+4b=1000

となると思います。さて、ここから行列を登場させてみましょう。式①ではaとbを足すと300になります。aを1倍、bを1倍すると300と同じということです。左辺は、異なる2組の数の組み合わせを、対応する数同士を掛け合わせて、合計する操作と同じです。そのため、行列の積で表すことができます。同様にして、式②の左辺も、行列の積で表すことができます。

式①            $${\begin{pmatrix} 1&1\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=300}$$
式②            $${\begin{pmatrix} 2&4\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=1000}$$

また、式①と式②の左辺と右辺はそれぞれ、上下に並べて、一つの行列として表しても、式の同値性が崩れることはありません。そこで、二つの式を、行列を使った一つの等式として表してみましょう。

$${\begin{pmatrix} 1&1\\2&4\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=\begin{pmatrix}300\\1000\end{pmatrix}}$$

では、これを解いてみましょう。両辺の左側に逆行列を掛けていきます。

$${\begin{pmatrix} 1&1\\2&4\end{pmatrix}^{-1} \begin{pmatrix} 1&1\\2&4\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}= \begin{pmatrix} 1&1\\2&4\end{pmatrix}^{-1}\begin{pmatrix}300\\1000\end{pmatrix}}$$

2行2列の行列の逆行列は、一般によく知られる公式$${\frac{1}{ad-bc}\begin{smallmatrix}d&-b\\-c&a\end{smallmatrix}}$$で計算することができますので、

$${\begin{pmatrix}a\\b\end{pmatrix}= \frac{1}{1\cdot 4-1\cdot 2}\begin{pmatrix}4&-1\\-2&1\end{pmatrix}\begin{pmatrix}300\\1000\end{pmatrix}}$$

$${\begin{pmatrix}a\\b\end{pmatrix}=\begin{pmatrix}100\\200\end{pmatrix}}$$

これが行列による連立方程式の解き方の簡単な流れです。2行2列の行列に限らず、変数の数と等式の数が一致する一次の連立方程式については、全て同じようにして、連立方程式の行列による表現を作ることが可能になります。しかし、逆行列が全ての行列において存在する訳ではないことから、この連立方程式の行列表現は、手計算をする際にはこれまであまり使われてこなかったものと思います。

擬似逆行列を使って連立方程式の最小二乗解を解く

擬似逆行列というものがあります。Wikipediaを見ると複素数を含む行列に対する説明があり非常に難解ですが、実数の行列の範囲内で、同じ概念を説明することが可能のようです。

(Aの擬似逆行列)=$${(A^T A)^{-1}A^T}$$

で表すことができます。(実数の範囲内に限る。複素数を要素に持つ行列は、エルミート行列やユニタリ行列の説明もしないといけない。また、しっかりと解説を読み込んでないのですが、一部例外があるらしいです。)
この概念はムーアという人と、ペンローズという人が提唱したことから、ムーア・ペンローズの逆行列とも呼ばれているそうです。また、一般化逆行列とも呼ばれているそうです。ペンローズという人は、2020年にノーベル物理学賞を取ったことでも有名です。

さて、この擬似逆行列という概念を用いると、従来解けないはずの連立方程式を解くことができるようになるようです。

問題:あるコンビニエンスストアの販売記録について、男性と女性と子供の食べ物の購買金額をそれぞれ分析したところ、男性は一人につき弁当は1000円、フルーツを200円、飲料を400円購入するという。女性は一人につき弁当は400円、フルーツを250円、飲料を350円購入するという。子供は一人につき弁当は250円、フルーツを200円、飲料を200円購入するという。
ある二日間での販売記録を見てみたところ、1日目は弁当が205000円、フルーツは90000円、飲料は130000円。2日目は弁当が285000円、フルーツは97500円、飲料は152500円であった。1日目は450人、2日目は400人が購入をしたことがわかっている。
1日目と2日目の男性、女性、子供の人数をそれぞれ推定する。

1日目の男性の人数をa、女性の人数をb、子供の人数をc、2日目の男性の人数をd、女性の人数をe、子供の人数をfとすると、この問題は8つの等式にまとめることができます。

(1日目)
式①        1000a+400b+250c=205000
式②        200a+250b+200c=90000
式③        400a+350b+200c=130000
式④        a+b+c=400
(2日目)
式①        1000d+400e+250f=285000
式②        200d+250e+200f=97500
式③        400d+350e+200f=152500
式④        d+e+f=450

さらに行列を使って表現するならば、以下のように一つの行列に表現することができます。

$${\begin{pmatrix}1000&400&250\\200&250&200\\400&350&200\\1&1&1\end{pmatrix}\begin{pmatrix}a&d\\b&e\\c&f\end{pmatrix}= \begin{pmatrix}205000&285000\\90000&97500\\130000&152500\\400&450\end{pmatrix}}$$

擬似逆行列を使うとこの式に(一応の)解をつけることができます。

$${\begin{pmatrix}1000&400&250\\200&250&200\\400&350&200\\1&1&1\end{pmatrix}=A}$$とする。

$${(A^TA)^{-1}A^T A\begin{pmatrix}a&d\\b&e\\c&f\end{pmatrix}= (A^T A)^{-1}A^T \begin{pmatrix}205000&285000\\90000&97500\\130000&152500\\400&450\end{pmatrix}}$$

$${\begin{pmatrix}a&d\\b&e\\c&f\end{pmatrix}= (A^T A)^{-1}A^T\begin{pmatrix}205000&285000\\90000&97500\\130000&152500\\400&450\end{pmatrix}}$$

$${\begin{pmatrix}a&d\\b&e\\c&f\end{pmatrix} = \begin{pmatrix}100&200\\200&150\\100&100\end{pmatrix}}$$

といった感じで、一部のn行n列ではない行列についても、左辺から右辺に移し替えて、計算を続けることができます。今回はすっきりと合致する答えを得ることができました。擬似逆行列は厳密な逆行列ではないため、得られた解が全ての条件を満たすとは限らないようです。一般的には、擬似逆行列を作る元の行列がn行n列の形の正方行列で、逆行列が存在する場合には、擬似逆行列は逆行列と完全一致して、連立方程式はただ1つの答えに定まるようです。解が一つに定まらない時には、最小二乗解と呼ばれる特殊な解になるようです。今回は擬似逆行列を作る元の行列が正方行列ではありませんでしたが、ただ一つの解に定まる例となります。

$${\begin{pmatrix}1000&400&250\\200&250&200\\400&350&200\\1&1&1\end{pmatrix}\begin{pmatrix}a&d\\b&e\\c&f\end{pmatrix}\begin{pmatrix}0.1&0.1\\0.2&0.2\end{pmatrix} = \begin{pmatrix}77500&77500\\95000&95000\\43500&43500\\130&130\end{pmatrix}}$$

このような特殊な形の行列による等式も、いくつかの形であればただ一つの解を求めることができるものと思います。この式の意味としては、1日目に1割引、2日目に2割引して販売した場合の、合計の割引金額から元の販売人数を推測するみたいな意味合いでしょうか…。

今回複雑な方程式をプログラムを用いて解くのに擬似逆行列というツールを知り、使ってみたところ案外に面白い使い方ができそうな気がしましたので、紹介してみました。

いいなと思ったら応援しよう!