Pythonの勉強がてら、4元1次連立方程式を解いてみました。連立方程式を解くだけで、NumPyと行列計算を学ぶことが出来ます。
$$
\left\{
\begin{array}{}
2w + 3x + 5y + 7z &=& 12\\
13w + 17x + 19y + 23z &=& 22\\
31w + 37x + 41y + 43z &=& 28\\
53w + 59x + 61y + 67z &=& 30
\end{array}
\right.
$$
こんな連立方程式解きたくないですよね。係数には素数ばっかり。
PythonのNumPyを使ってこの連立方程式を解いてみました。
import numpy as np
a = np.array([[2,3,5,7],
[13,17,19,23],
[31,37,41,43],
[53,59,61,67]])
b = np.array([[12],
[22],
[28],
[30]])
#a_inv = np.linalg.inv(a) #aの逆行列を求める
#x = a_inv.dot(b) #aの逆行列×bの計算
x = np.linalg.solve(a,b) #上2行は1行でこのようにも書ける
print(x)
aのところに係数を順番に入れていって、bのところに右辺の値を入れていくだけです。
出力結果は、
x = [[-2], [-1], [1], [2]]でした。つまり
$$
\left\{
\begin{array}{}
w &=& -2\\
x &=& -1\\
y &=& 1\\
z &=& 2
\end{array}
\right.
$$
ということです。
いやー、楽だ、Pythonってすごい、コンピューターってすごい。
コメント