バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、行列を使用して連立方程式を解いてみた。
行列は除算ができないが「逆行列を掛ける」で除算相当を実現している。
かなり明確なルールなため、プログラム化も楽そうというのがわかった。
今回は、前回、2×2行列の逆行列の公式でお茶を濁した逆行列算出の部分について。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
逆行列の求め方

前回は行列を使うことで連立方程式が簡単に解けるってのはわかったんだけど、
その過程で逆行列ってのがでてきたじゃん?

うん。
公式使ってお茶を濁したところだな。

お茶を濁した自覚はあったのか・・・。

まずは結果が出る方を重視しただけだな。

となると、逆行列ってどう求めることになるの?

前回の名前だけ出したと思うが、
掃き出し法という手法を利用する。

掃き出し法?

\(I\)を単位行列
\(AX=I\)
とした場合、
\(X\)は\(A\)の逆行列である。
という理屈を利用した手法だな。
掃き出し法

実際にやるとどんな感じになるの?

恒例の以下の連立方程式を元に実際にやってみよう。
\(
\begin{eqnarray}
\left\{
\begin{array}{l}
2x + 3y = 1 \\
5x + y = 3
\end{array}
\right.
\end{eqnarray}
\)
掃き出し法を実施
↓
\(
A=
\begin{bmatrix}
2 & 3 \\
5 & 1
\end{bmatrix}
\)
↓
\(
\begin{array}{cc|cc}
2 & 3 & 1 & 0 \\
5 & 1 & 0 & 1
\end{array}
\)
2行目を5で割る
\(
\begin{array}{cc|cc}
2 & 3 & 1 & 0 \\
2 & 2/5 & 0 & 2/5
\end{array}
\)
2行目から1行目を引く
\(
\begin{array}{cc|cc}
2 & 3 & 1 & 0 \\
0 & -13/5 & -1 & 2/5
\end{array}
\)
2行目に5を掛ける
\(
\begin{array}{cc|cc}
2 & 3 & 1 & 0 \\
0 & -13 & -15 & 2
\end{array}
\)
2行目に-3/13を掛ける
\(
\begin{array}{cc|cc}
2 & 3 & 1 & 0 \\
0 & -13 & -15/13 & -6/13
\end{array}
\)
1行目から2行目を引く
\(
\begin{array}{cc|cc}
2 & 0 & 2/13 & -6/13 \\
0 & -3 & -15/13 & -6/13
\end{array}
\)
1行目を2で割り、2行目を-3で割る。
\(
\begin{array}{cc|cc}
1 & 0 & 1/13 & -3/13 \\
0 & 1 & -5/13 & -2/13
\end{array}
\)
よって、\(A\)の逆行列\(A^{^-1}\)は
\(
\displaystyle\frac{1}{13}
\begin{bmatrix}
1 & -3 \\
-5 & -2
\end{bmatrix}
\)

おおおおおー!
本当に逆行列が求まったー!

まぁ左側を単位行列にするために、
行列対角部以外をなんとかして0にする。
その後、対角成分で各行を割ればOKって流れだな。
十分プログラム化可能なロジックだ。
これを毎回やるの?

でも、これを毎回やるってのも大変だよな・・・

その点は大丈夫だ。
MATLAB、Python(Numpy)、Scilab、Juliaは逆行列を求める機能があるんで、
今後はツール/言語の機能を使うだけだ。

なんだ。
それだったら安心だ。

文明の利器に感謝だな。
まとめ

まとめだよ。
- 逆行列は掃き出し法にて求めることができる。
- 実際に掃き出し法を実施。
- 前回使用した逆行列が求まった。
- MATLAB、Python(Numpy)、Scilab、Juliaでは逆行列を求める機能があるので、直に計算することはない・・・想定。
バックナンバーはこちら。
コメント