MATLAB,Python,Scilab,Julia比較 その9【行列④】

MATLAB,Python,Scilab,Julia比較 その9【行列④】 数値計算
MATLAB,Python,Scilab,Julia比較 その9【行列④】

バックナンバーはこちら。
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では逆行列を求める機能があるので、直に計算することはない・・・想定。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました