連立一次方程式

連立一次方程式

執筆済 数学数値計算
Ax=b

数値計算で最も基本的な問題。

解き方#

方法 計算量 適する場面
LU 分解 𝒪(n3) 一般の密行列
コレスキー分解 𝒪(n3/3) 対称正定値。約半分の手間
QR 分解 𝒪(n3) 最小二乗、数値的に安定
共役勾配法 𝒪(n)/反復 大規模疎行列、対称正定値

逆行列を作らない#

x=A1bではなくLUx=b を前進・後退代入

逆行列を陽に求めるのは遅く、精度も悪い

python
np.linalg.solve(A, b)      # これ
np.linalg.inv(A) @ b       # これは避ける

ピボット選択#

LU 分解では、対角成分が 0 に近いと桁落ちする。 行を入れ替えて絶対値の大きい要素を対角に持ってくる(部分ピボット選択)ことで、 安定性が確保される。

これを省くと、理論上は解けても数値的に破綻する。 アルゴリズムの安定性が実装の細部で決まる典型例。

反復法#

n106 を超えると直接法は使えない。 共役勾配法などの反復法では、 行列を陽に持たず Av の計算だけできればよい(matrix-free)。 収束の速さは条件数に依存し、 前処理 (preconditioning) で改善する。

参考文献#

ノート一覧を閉じる