pythonで線形連立方程式を解く方法を紹介します。
NumPy
の線形ソルバーを使用して、線形連立方程式を解いてみましょう。
参考:numpy.linalg.solve — NumPy v1.19 Manual
式変形:連立方程式⇒行列方程式
まず、連立方程式を行列形式に式変形します。
- 各未知数の係数を係数行列に整理,
A
- 右辺の定数をベクトル形式に整理,
b
3元連立方程式を例に行列形式への式変形を図にしてみます。
この連立方程式を行列とベクトルで表現します。
ここまでは、手計算でがんばりましょう!
次にプログラム上で、係数行列とベクトルを作成します。
この図では、リストで記述していますが、ndarray
でもOKです。
これで準備完了です。
通常はこの後ガウスの消去法を使用したり、反復法を使用したり、ここからが本番です。
しかし、pythonであれば、この後の処理は非常に簡単です。
NumPyによる求解:numpy.linalg.solve
NumPyの組み込み関数を使用して、求解する方法を紹介します。
x = numpy.linalg.solve(A, b)
を実行するだけで解が得られます。
では、実際にサンプルコードを見てみます。
import numpy as np
# 係数行列とベクトルの用意
A = np.array([[4, 3, 2],
[2, -1, -2],
[1, 5, 6]])
b = np.array([4, 2, 3])
# 求解
x = np.linalg.solve(A, b)
print(f"x = {x}")
# x = [ 3. -6. 5.]
非常に簡単に連立方程式を解けましたね。
解の確認にはnp.dot
でA
とx
の積を求めて、b
と比較します。
print(f"A*x={np.dot(A,x)}")
print(f"b={b}")
# A*x=[4. 2. 3.]
# b=[4 2 3]
おわりに
他にもNumPy
の記事を書いていますのでぜひ見てみてください!