YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

【徹底図解】python (numpy) で連立方程式を解く方法【サンプルコード】

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.dotAxの積を求めて、bと比較します。

print(f"A*x={np.dot(A,x)}")
print(f"b={b}")
# A*x=[4. 2. 3.]
# b=[4 2 3]

おわりに

他にもNumPyの記事を書いていますのでぜひ見てみてください!