Pythonを用いた連立1次方程式の数値解法(LU分解)
はじめに
Python (Numpy, Scipy) を用いて連立1次方程式を数値的に解く方法についてメモを記す。
例題
これを行列で表すと、
解き方
numpy.linalg.solve
を使って次のように計算できる。
import numpy A = numpy.array([[1, 2, -1], [2, -1, -1], [5, 1, -3]]) b = numpy.array([2, -3, -2]) x = numpy.linalg.solve(A, b) print x
結果は次のとおりとなる。
array([1., 2., 3.])
1組の連立方程式を単発で解く場合は上の方法で問題ないが、
の部分は変わらずにが変わる場合を数多く解く場合には次のLU分解を使うやり方のほうが計算時間を節約できる。一度計算して求めたlu_factor
を使いまわしてが変わった場合を計算すればよい。
import numpy import scipy.linalg A = numpy.array([[1, 2, -1], [2, -1, -1], [5, 1, -3]]) b = numpy.array([2, -3, -2]) lu = scipy.linalg.lu_factor(A) x = scipy.linalg.lu_solve(lu, b)