ガウスの消去法

Gaussian Elimination

初級

公開日: 2026-03-20

1. 概要

ガウスの消去法(Gaussian Elimination)は、連立一次方程式 $A\mathbf{x} = \mathbf{b}$ を解く最も基本的な直接法である。拡大係数行列 $[A|\mathbf{b}]$ に行基本変形を施して上三角行列に変換し(前進消去)、その後、後退代入により解を求める。

C. F. Gauss (1777--1855) にちなんで名付けられたが、同様の手法は紀元前の中国の『九章算術』にも見られる。

2. 前進消去

$n \times n$ の係数行列 $A$ と右辺ベクトル $\mathbf{b}$ から拡大係数行列を構成し、第 $k$ 列($k = 1, 2, \ldots, n-1$)について、$k$ 行目より下の全ての行から $k$ 行目の定数倍を引いて $a_{ik}$ を消去する。

消去の乗数

第 $k$ ステップにおいて、$i > k$ に対し乗数 $m_{ik}$ を

$$m_{ik} = \frac{a_{ik}^{(k)}}{a_{kk}^{(k)}}$$

と定め、第 $i$ 行から第 $k$ 行の $m_{ik}$ 倍を引く:$a_{ij}^{(k+1)} = a_{ij}^{(k)} - m_{ik}\, a_{kj}^{(k)}$。

a₁₁ a₁₂ a₁₃ a₂₁ a₂₂ a₂₃ a₃₁ a₃₂ a₃₃ 元の行列 k=1 a₁₁ a₁₂ a₁₃ 0 a'₂₂ a'₂₃ 0 a'₃₂ a'₃₃ k=2 a₁₁ a₁₂ a₁₃ 0 a'₂₂ a'₂₃ 0 0 a''₃₃ 上三角行列
図1. 前進消去の過程。各ステップで対角より下の要素を 0 にし、最終的に上三角行列を得る。

3. 後退代入

前進消去により上三角形 $U\mathbf{x} = \mathbf{c}$ が得られたら、最後の行から順に解を求める:

$$x_n = \frac{c_n}{u_{nn}}, \qquad x_k = \frac{1}{u_{kk}}\!\left(c_k - \sum_{j=k+1}^{n} u_{kj}\, x_j\right), \quad k = n{-}1, \ldots, 1$$

4. 計算過程のアニメーション例

具体的な3変数の連立方程式で、前進消去と後退代入の全過程をステップごとに確認する。

ガウスの消去法(3変数)
1 / 9

拡大係数行列による計算例

上記のアニメーションと同じ連立方程式を、拡大係数行列の行操作として表記する。

前進消去:

$$\left[\begin{array}{ccc|c} 2 & 1 & -1 & 8 \\ -3 & -1 & 2 & -11 \\ -2 & 1 & 2 & -3 \end{array}\right]$$

$R_2 \leftarrow R_2 + \frac{3}{2}R_1$, $R_3 \leftarrow R_3 + R_1$:

$$\left[\begin{array}{ccc|c} 2 & 1 & -1 & 8 \\ 0 & \frac{1}{2} & \frac{1}{2} & 1 \\ 0 & 2 & 1 & 5 \end{array}\right]$$

$R_3 \leftarrow R_3 - 4R_2$:

$$\left[\begin{array}{ccc|c} 2 & 1 & -1 & 8 \\ 0 & \frac{1}{2} & \frac{1}{2} & 1 \\ 0 & 0 & -1 & 1 \end{array}\right]$$

後退代入: 3行目から $x_3 = -1$、2行目に代入して $x_2 = 3$、1行目に代入して $x_1 = 2$。

5. ピボット選択

前進消去の第 $k$ ステップにおいて、ピボット $a_{kk}^{(k)}$ がゼロまたはゼロに近い場合、ゼロ除算や大きな丸め誤差が生じる。これを避けるためにピボット選択を行う。

5.1 部分ピボット選択(Partial Pivoting)

第 $k$ 列の $k$ 行目以下で絶対値が最大の要素を選び、行の交換を行う。行の交換は連立方程式の式の順番を入れ替えるだけなので、変数の対応関係は変わらない。実用上はほとんどの場合これで十分であり、LAPACKなどの標準的な数値計算ライブラリでも採用されている。

* * * * 0 2 5 3 0 7 1 4 0 3 6 2 探索列 行交換 第2列の k=2 以下で |7| が最大 → 第3行をピボット行に
図2. 部分ピボット選択の概念図。第 $k$ 列で絶対値最大の要素がある行とピボット行を交換する。

5.2 完全ピボット選択(Complete Pivoting)

完全ピボット選択では、第 $k$ ステップにおいて $k$ 行目以下かつ $k$ 列目から右の全要素から絶対値最大のものを探し、行と列の両方を交換する。

* * * * 0 2 5 3 0 1 9 4 0 3 6 2 探索範囲(k=2 行目以下・k=2 列目から右) 行交換 列交換 探索範囲の全要素から |9| が最大 → 第3行と第2行を交換 → 第3列と第2列を交換 (= x₂ と x₃ の入れ替え)
図3. 完全ピボット選択の概念図。探索範囲(黄色)の全要素から絶対値最大を選び、行交換(赤)と列交換(青)の両方を行う。

列の交換は変数の順序の入れ替えに相当する。例えば第2列と第3列を交換すると、$x_2$ と $x_3$ の役割が入れ替わる。したがって、全ての消去が終わった後に列の交換履歴を逆順にたどって、変数の順序を元に戻す必要がある。

部分 vs 完全:完全ピボット選択は数値的安定性がわずかに優れるが、最大要素の探索に $O(n^2)$ の追加コストがかかる。部分ピボット選択の探索コストは $O(n)$ であり、実用上は部分ピボット選択で十分な場合がほとんどである。

5.3 有理数演算でのピボット選択

上記のピボット選択戦略は浮動小数点演算を前提としている。有理数(多倍長整数による分数)で厳密にガウスの消去法を実行する場合、丸め誤差は発生しないが、代わりに中間値の膨張(coefficient swell)が問題となる。消去の過程で分子・分母の桁数が爆発的に増大し、計算が極端に遅くなることがある。

この問題を軽減するために、浮動小数点とは逆に、絶対値が最小の(ゼロでない)要素をピボットに選ぶ戦略が有効である。より正確には、有理数 $p/q$(既約分数)の高さ $H(p/q) = \max(|p|, |q|)$ が最小の要素をピボットに選ぶことで、消去の乗数の分子・分母が小さくなり、中間値の膨張を抑えられる。

補足:有理数のガウスの消去法では、ピボット選択以外にも、各ステップで中間値を既約分数に約分する、あるいはBareissのアルゴリズム(分数を使わず整数のまま消去する手法)を用いるなど、中間値膨張を避ける工夫がある。

6. 計算量

$n$ 元連立一次方程式に対するガウスの消去法の計算量は次の通りである。

  • 前進消去: $\frac{2}{3}n^3 + O(n^2)$ 回の浮動小数点演算
  • 後退代入: $n^2 + O(n)$ 回の浮動小数点演算
  • 全体: $O(n^3)$

7. LU分解との関係

ガウスの消去法の前進消去は、行列 $A$ を下三角行列 $L$ と上三角行列 $U$ の積に分解する操作と等価である:

$$A = LU$$

消去の乗数 $m_{ik}$ が $L$ の対角より下の要素となり、消去後の上三角行列が $U$ である。一度 $LU$ 分解を行えば、異なる右辺 $\mathbf{b}$ に対して $O(n^2)$ で解が求まるため、同じ係数行列で複数の右辺を解く場合に効率的である。

8. よくある質問

Q1. ガウスの消去法とは何ですか?

連立一次方程式を前進消去と後退代入の2段階で解く直接法である。計算量は $O(n^3)$ であり、数値線形代数の最も基本的なアルゴリズムである。

Q2. ピボット選択はなぜ必要ですか?

ピボット要素が 0 またはゼロに近いとゼロ除算や大きな丸め誤差が発生する。部分ピボット選択により列内の絶対値最大の要素をピボットに選ぶことで数値的安定性が向上する。

Q3. ガウスの消去法とLU分解の関係は?

前進消去の過程は行列 $A$ を $L$(下三角)と $U$(上三角)に分解する操作と等価である。消去の乗数が $L$ の要素、消去後の行列が $U$ となる。

9. 参考資料

  • Wikipedia「ガウスの消去法」(日本語版)
  • Wikipedia「Gaussian elimination」(英語版)
  • G. H. Golub & C. F. Van Loan, Matrix Computations, 4th ed., Johns Hopkins, 2013.
  • L. N. Trefethen & D. Bau III, Numerical Linear Algebra, SIAM, 1997.