Pythonで汚い4元1次連立方程式を解いてみた

スポンサーリンク

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ってすごい、コンピューターってすごい。

コメント

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