ブログ上で線形代数をPythonで実装(初心者向け)
下のコードのところで,▶︎を押してもらえれば,計算が実行されます.
解が一意的に定まる連立方程式を,今回は4次元の行列解法として,Pythonを使って解いてみました.なお固有値などのテーマは後日扱う予定です.
具体的には,最初に4×4の行列Aを用意しました.$$ A= \left( \begin{array}{ccc} -1 & 4 & -3 & 1 \\ 2 & -3 & -2 & 1 \\ 4 & 2 & 1 & -2 \\ 1 & 1 & 4 & -3 \end{array} \right) $$
行列は,np.arrayで定義されます.
その後は,階数(rankA),行列式(detA),逆行列の求め方を載せてます.
・行列式 np.linalg.det(A)
今回は49ですね.(ソフトだと,48.99999…になっています)
・ランク np.linalg.matrix_rank(A)
今回はrank 4と出ました.
・逆行列 np.linalg.inv(A)
…数値は煩雑なので割愛します.
最後にベクトル\( \vec{y} \)を用意してあげて,\( A\vec{x}=\vec{y} \)を使って,\( \vec{x} \)を求めます.
$$ \left( \begin{array}{ccc} -1 & 4 & -3 & 1 \\ 2 & -3 & -2 & 1 \\ 4 & 2 & 1 & -2 \\ 1 & 1 & 4 & -3 \end{array} \right) \vec{x}= \left( \begin{array}{ccc} -19 \\ 7 \\ 18 \\ -3 \end{array} \right) $$
・行列方程式を解く np.linalg.solve(A,y)
これにより$$ \vec{x}= \left( \begin{array}{ccc} 5 \\ -1 \\ 4 \\ 2 \end{array} \right) $$
と求めることができました.めでたし,めでたし.
ちなみに,A.dot(x)と打てば,\( \vec{y} \)が計算できます.
上のコードはいじったりしても大丈夫ですので,
0 1 2 3 |
yy=A.dot(x) print(yy) |
と追加して,実行してあげてください.
線形代数は,統計や機械学習をする上で,基本の骨格になってきます.
ただ個人的に,行列成分を目で追ったりするのは,疲れてあまり好きではないです.煩雑で生産性のないところはソフトで実装できるようにして,理論の勉強により特化できるようにすると成長できる気がしています.