# 定常反復法：Jacobi 法・Gauss–Seidel 法・SOR 法の収束と最適な緩和係数

> 行列の分割による定常反復が収束する条件 ρ(M⁻¹N) < 1 を示し、対角優位・正定値での Jacobi 法・Gauss–Seidel 法・SOR 法の収束、Kahan の必要条件、Young の定理と最適な緩和係数、離散 Laplace 方程式での収束率を証明する。
> https://rikai.mugen-giken.com/mathematics/numerical-linear-algebra/stationary-iterative-methods

## 0. この記事の要点

大きな連立方程式を、一度に解くのではなく「いまの答えの見積もりを少しずつ直す」操作の繰り返しで解く方法を扱います。たとえば 2 つの未知数 $x_1$, $x_2$ があるとき、$x_2$ の今の値から $x_1$ を計算し直し、その $x_1$ から $x_2$ を計算し直す、という往復です。この記事を読むと、そうした繰り返しがいつ正しい答えに近づくのか、近づく速さは何で決まるのか、更新の幅をどう選ぶと速くなるのかが分かります。

- 連立一次方程式 $A\boldsymbol{x} = \boldsymbol{b}$ の係数行列を $A = M - N$ と分け、$M\boldsymbol{x}_{k+1} = N\boldsymbol{x}_k + \boldsymbol{b}$ を繰り返すのが**定常反復法**です。任意の初期値で収束することと、反復行列の[スペクトル半径](/mathematics/numerical-linear-algebra/norms-and-conditioning#def-spectral-radius)（固有値の絶対値の最大）が $\rho(M^{-1}N) < 1$ であることは同値で、1 回あたり誤差はおよそ $\rho$ 倍になります。
- 狭義対角優位（各行で対角成分が他の成分の絶対値の和より大きいこと）なら Jacobi 法と Gauss–Seidel 法は収束します。[正定値](/mathematics/linear-algebra/spectral-theorem#def-positive-definite) Hermite 行列なら、SOR 法は $0 < \omega < 2$ で収束します（Ostrowski–Reich）。逆に、どんな行列でも $\rho(\mathcal{L}_\omega) \ge |\omega - 1|$ なので、$0 < \omega < 2$ は収束に必要です（Kahan）。
- **矛盾なく順序づけられた**行列（未知数の番号づけが、隣り合う未知数の間で規則正しく上下する行列。§4 で定義します）、たとえば三重対角行列や、格子の自然な順序・赤黒順序（格子点を市松模様に塗り分け、赤の点を先に並べる順序）の離散 Laplace 行列では、Jacobi 法の固有値 $\mu$ と SOR 法の固有値 $\lambda$ が $(\lambda + \omega - 1)^2 = \lambda\omega^2\mu^2$ で結ばれます（Young の定理）。ここから $\rho_{\mathrm{GS}} = \rho_{\mathrm{J}}^2$ と最適な緩和係数 $\omega_{\mathrm{opt}} = 2/(1 + \sqrt{1 - \rho_{\mathrm{J}}^2})$ が出ます。
- 離散 Laplace 方程式（格子幅 $h$）では $\rho_{\mathrm{J}} = \cos\pi h$ で、10 桁縮めるのに必要な反復回数は Jacobi 法・Gauss–Seidel 法で $h^{-2}$、最適 SOR 法で $h^{-1}$ に比例します。
- この遅さが、[Krylov 部分空間](/mathematics/numerical-linear-algebra/lanczos-and-conjugate-gradient#def-krylov)法（[共役勾配法](/mathematics/numerical-linear-algebra/lanczos-and-conjugate-gradient)）と前処理、多重格子法へ進む理由です。

<Aside type="tip" title="この記事で使う事前知識">

- **スペクトル半径**: 正方行列の固有値の絶対値の最大。→ [スペクトル半径](/mathematics/numerical-linear-algebra/norms-and-conditioning#def-spectral-radius)
- **誘導ノルム**: ベクトルのノルムから決まる、行列の「拡大率の最大」としてのノルム。→ [誘導ノルム](/mathematics/numerical-linear-algebra/norms-and-conditioning#def-induced-norm)
- **正定値**: 零でないすべてのベクトル $\boldsymbol{x}$ で $\boldsymbol{x}^{*}A\boldsymbol{x} > 0$ となる Hermite 行列の性質。→ [正定値](/mathematics/linear-algebra/spectral-theorem#def-positive-definite)
- **特性多項式**: $\det(tI - A)$ のことで、その根が固有値。→ [特性多項式](/mathematics/linear-algebra/eigenvalues#def-charpoly)
- **行列式**: 三角行列では対角成分の積になり、積の定理 $\det(AB) = \det A\det B$ を満たす量。→ [行列式](/mathematics/linear-algebra/determinants#def-determinant)
- **狭義対角優位**: 各行で対角成分の絶対値が他の成分の絶対値の和より大きいこと。→ [行列の固有値評価と不等式](/mathematics/linear-algebra/matrix-inequalities#cor-diagonal-dominance)

</Aside>

## 1. 動機

偏微分方程式を差分法で離散化すると、未知数が $10^6$ を超える疎な連立一次方程式が現れます。Gauss 消去は fill-in（もとは $0$ だった成分が消去の途中で非零になること）のためにメモリも演算量も膨らみますが、行列とベクトルの積や「各未知数を隣接する値から更新する」操作なら、非零成分の個数に比例する手間で済みます。

Laplace 方程式 $-\Delta u = f$ の 5 点差分では、各格子点の値は「上下左右の値の平均 $+\ h^2f/4$」です。この関係を、いまの近似値を右辺に入れて左辺を更新する、という形で繰り返すのが Jacobi 法です。更新した値をすぐ使えば Gauss–Seidel 法、更新幅を $\omega$ 倍に伸ばせば SOR 法（逐次過緩和法）になります。

本章の問いは 3 つです。いつ収束するか。どれくらいの速さか。$\omega$ をどう選べばよいか。答えはすべて**反復行列のスペクトル半径**で書けます。スペクトル半径と行列の冪の関係は [行列のノルムと線形方程式の条件数](/mathematics/numerical-linear-algebra/norms-and-conditioning) の結果を使い、固有値の計算は [冪乗法・逆反復の章](/mathematics/numerical-linear-algebra/power-and-inverse-iteration) と同じく固有ベクトルでの展開が基本になります。

## 2. 分割と定常反復

<Definition id="def-splitting" title="行列の分割と定常反復">
$A \in \mathbb{C}^{n\times n}$ を正則とする。$A = M - N$（$M$ は正則）を $A$ の**分割**という。$\boldsymbol{x}_0 \in \mathbb{C}^n$ から
$$
M\boldsymbol{x}_{k+1} = N\boldsymbol{x}_k + \boldsymbol{b},\qquad\text{すなわち}\qquad \boldsymbol{x}_{k+1} = G\boldsymbol{x}_k + M^{-1}\boldsymbol{b},\quad G = M^{-1}N
$$
で $\boldsymbol{x}_k$ を作る反復を**定常反復**、$G$ を**反復行列**という。
</Definition>

「定常」とは、$G$ と $M^{-1}\boldsymbol{b}$ が $k$ によらないことを指します。$M$ は「$M\boldsymbol{y} = \boldsymbol{c}$ が安く解ける」ように選びます。$A$ の対角部分を $D$、狭義下三角部分の符号を変えたものを $L$、狭義上三角部分の符号を変えたものを $U$ として $A = D - L - U$ と書くと、代表的な 3 つの方法は次の分割です（$D$ は正則、つまり対角成分はすべて $0$ でないとする）。

| 方法 | $M$ | 反復行列 |
|---|---|---|
| Jacobi 法 | $D$ | $G_{\mathrm{J}} = D^{-1}(L + U)$ |
| Gauss–Seidel 法 | $D - L$ | $G_{\mathrm{GS}} = (D - L)^{-1}U$ |
| SOR 法（緩和係数 $\omega \ne 0$） | $\omega^{-1}D - L$ | $\mathcal{L}_\omega = (D - \omega L)^{-1}\bigl((1 - \omega)D + \omega U\bigr)$ |

Gauss–Seidel 法は $\omega = 1$ の SOR 法です。成分で書くと、Gauss–Seidel 法は $i = 1, 2, \ldots, n$ の順に
$$
x_i^{(k+1)} = \frac{1}{a_{ii}}\Bigl(b_i - \sum_{j<i}a_{ij}x_j^{(k+1)} - \sum_{j>i}a_{ij}x_j^{(k)}\Bigr)
$$
と、更新済みの成分をすぐに使います。SOR 法はこの右辺を $\tilde{x}_i$ として $x_i^{(k+1)} = (1 - \omega)x_i^{(k)} + \omega\tilde{x}_i$ とします。$D - L$ と $D - \omega L$ は対角成分が $0$ でない下三角行列で、行列式は対角成分の積（<Ref to="mathematics/linear-algebra/determinants#prop-basic" /> の 2）なので正則です。

小さな例で動きを見ます。$A = \begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix}$, $\boldsymbol{b} = (1, 1)^{\mathsf{T}}$ の解は $\boldsymbol{x}^{*} = (1, 1)^{\mathsf{T}}$ です。$\boldsymbol{x}_0 = \boldsymbol{0}$ から Jacobi 法を 3 回回すと、$x_1 = x_2$ が $0.5,\ 0.75,\ 0.875$ と進み、誤差は毎回ちょうど半分になります。Gauss–Seidel 法では、更新したばかりの $x_1$ をすぐ $x_2$ の計算に使うので、$(x_1, x_2)$ は $(0.5, 0.75)$, $(0.875, 0.9375)$, $(0.96875, 0.984375)$ と進み、誤差は毎回 $1/4$ になります。同じ 3 回でも、誤差は Jacobi 法で $0.125$、Gauss–Seidel 法で $0.03125$ 以下です。この「毎回何倍になるか」が、次の定理が扱う反復行列のスペクトル半径で、この例では Jacobi 法が $1/2$、Gauss–Seidel 法が $1/4$ です（演習で確かめます）。

次の定理は、反復が収束するかどうかが反復行列 $G$ のスペクトル半径だけで決まることを述べます。3 の $\varepsilon$ は、スペクトル半径がほぼ「1 回あたりの縮み率」になることを正確に言うための小さな余裕です。

<Theorem id="thm-stationary-convergence" title="定常反復の収束の同値条件">
<Ref to="def-splitting" /> の定常反復について、$\boldsymbol{x}^{*} = A^{-1}\boldsymbol{b}$ とする。

1. 誤差 $\boldsymbol{e}_k = \boldsymbol{x}_k - \boldsymbol{x}^{*}$ は $\boldsymbol{e}_k = G^k\boldsymbol{e}_0$ を満たす。
2. すべての初期値 $\boldsymbol{x}_0 \in \mathbb{C}^n$ について $\boldsymbol{x}_k \to \boldsymbol{x}^{*}$ となるための必要十分条件は $\rho(G) < 1$ である。$A$, $M$, $\boldsymbol{b}$ が実のとき、「すべての実の初期値」としても同じである。
3. $\rho(G) < 1$ のとき、任意の $\varepsilon > 0$ に対し、$\boldsymbol{e}_0$ によらない定数 $c_\varepsilon$ があって $\|\boldsymbol{e}_k\|_2 \le c_\varepsilon(\rho(G) + \varepsilon)^k\|\boldsymbol{e}_0\|_2$。一方、$G$ の固有値 $\lambda$ で $|\lambda| = \rho(G)$ となるものの固有ベクトルを $\boldsymbol{e}_0$ にとると $\|\boldsymbol{e}_k\|_2 = \rho(G)^k\|\boldsymbol{e}_0\|_2$ である。
</Theorem>

<Proof of="thm-stationary-convergence">
1. $M\boldsymbol{x}^{*} = N\boldsymbol{x}^{*} + \boldsymbol{b}$（$A\boldsymbol{x}^{*} = \boldsymbol{b}$ の書き直し）を反復の式から引くと $M\boldsymbol{e}_{k+1} = N\boldsymbol{e}_k$、すなわち $\boldsymbol{e}_{k+1} = G\boldsymbol{e}_k$ です。

2. $\rho(G) < 1$ なら $G^k \to O$（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#cor-power-convergence" />）なので、1 から任意の $\boldsymbol{e}_0$ で $\boldsymbol{e}_k \to \boldsymbol{0}$ です。逆に $\rho(G) \ge 1$ なら、$|\lambda| \ge 1$ の固有値 $\lambda$ と固有ベクトル $\boldsymbol{z}$ をとり $\boldsymbol{x}_0 = \boldsymbol{x}^{*} + \boldsymbol{z}$ とすると $\boldsymbol{e}_k = \lambda^k\boldsymbol{z}$ で、$\|\boldsymbol{e}_k\| = |\lambda|^k\|\boldsymbol{z}\| \not\to 0$ です。実の場合、すべての実の初期値で収束するなら、$\boldsymbol{z} = \boldsymbol{z}_{\mathrm{R}} + i\boldsymbol{z}_{\mathrm{I}}$（実部と虚部）について $G^k\boldsymbol{z}_{\mathrm{R}} \to \boldsymbol{0}$、$G^k\boldsymbol{z}_{\mathrm{I}} \to \boldsymbol{0}$（$G$ は実行列）なので $G^k\boldsymbol{z} \to \boldsymbol{0}$ となり、上と矛盾します。

3. スペクトル半径と誘導ノルムの定理（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#thm-spectral-radius-norm" /> の 2）により、あるノルム $\|\cdot\|_\varepsilon$ とその誘導ノルムで $\|G\|_\varepsilon \le \rho(G) + \varepsilon$ です。よって $\|\boldsymbol{e}_k\|_\varepsilon \le (\rho(G) + \varepsilon)^k\|\boldsymbol{e}_0\|_\varepsilon$ で、有限次元のノルムの同値性（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#lem-norm-equivalence" />）から $a\|\cdot\|_2 \le \|\cdot\|_\varepsilon \le b\|\cdot\|_2$ となる正の定数 $a$, $b$ があるので、$c_\varepsilon = b/a$ とすればよい。後半は 2 の後半と同じ計算です。
</Proof>

3 の上下の評価から、誤差を $10^{-d}$ 倍にするのに必要な反復回数は、最悪の初期値についておよそ $d\ln 10/(-\ln\rho(G))$ です。この分母 $-\ln\rho(G)$ を**漸近収束率**といいます。$\rho(G) = 1 - \eta$（$\eta$ は小さい）なら $-\ln\rho(G) \approx \eta$ で、回数は $1/\eta$ に比例します。

## 3. 対角優位な行列と正定値な行列

<Theorem id="thm-diagonally-dominant-convergence" title="狭義対角優位なら Jacobi 法と Gauss–Seidel 法は収束する">
$A = (a_{ij})$ が行について狭義対角優位、すなわちすべての $i$ で $|a_{ii}| > \sum_{j\ne i}|a_{ij}|$ とする。このとき $\rho(G_{\mathrm{GS}}) \le \|G_{\mathrm{J}}\|_\infty < 1$ かつ $\rho(G_{\mathrm{J}}) \le \|G_{\mathrm{J}}\|_\infty < 1$ であり、Jacobi 法と Gauss–Seidel 法は任意の初期値で収束する。
</Theorem>

<Proof of="thm-diagonally-dominant-convergence">
$A$ は狭義対角優位なので正則で（<Ref to="mathematics/linear-algebra/matrix-inequalities#cor-diagonal-dominance" /> の 1）、対角成分は $0$ でありません。$s_i^- = \sum_{j<i}|a_{ij}|/|a_{ii}|$、$s_i^+ = \sum_{j>i}|a_{ij}|/|a_{ii}|$ とおくと、仮定は $s_i^- + s_i^+ < 1$ です。

**Jacobi 法.** $G_{\mathrm{J}}$ の第 $i$ 行は $-a_{ij}/a_{ii}$（$j \ne i$）と対角の $0$ なので、行和の最大の公式（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#prop-induced-norm-formulas" /> の 2）から $\|G_{\mathrm{J}}\|_\infty = \max_i(s_i^- + s_i^+) < 1$ です。スペクトル半径は誘導ノルム以下（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#thm-spectral-radius-norm" /> の 1）なので $\rho(G_{\mathrm{J}}) < 1$ です。

**Gauss–Seidel 法.** $\lambda$ を $G_{\mathrm{GS}}$ の固有値、$\boldsymbol{z}$ を固有ベクトルとし、$|z_i| = \max_j|z_j| > 0$ となる $i$ をとります。$U\boldsymbol{z} = \lambda(D - L)\boldsymbol{z}$ の第 $i$ 成分は
$$
\lambda a_{ii}z_i = -\lambda\sum_{j<i}a_{ij}z_j - \sum_{j>i}a_{ij}z_j
$$
です。両辺の絶対値をとって $|a_{ii}||z_i|$ で割ると、$|z_j| \le |z_i|$ から $|\lambda| \le |\lambda|s_i^- + s_i^+$、すなわち $|\lambda|(1 - s_i^-) \le s_i^+$ です。$1 - s_i^- > s_i^+ \ge 0$ なので $|\lambda| \le s_i^+/(1 - s_i^-) < 1$ で、さらに $s_i^+/(1 - s_i^-) \le s_i^- + s_i^+$（両辺に $1 - s_i^-$ を掛けると $s_i^+ \le s_i^- + s_i^+ - s_i^-(s_i^- + s_i^+)$、つまり $s_i^-(s_i^- + s_i^+) \le s_i^-$ で、これは $s_i^- + s_i^+ < 1$ から成り立つ）なので $|\lambda| \le \|G_{\mathrm{J}}\|_\infty$ です。収束は <Ref to="thm-stationary-convergence" /> から従います。
</Proof>

正定値な行列では、ノルムとして**エネルギーノルム** $\|\boldsymbol{e}\|_A = (\boldsymbol{e}^{*}A\boldsymbol{e})^{1/2}$ を使うと見通しがよくなります。$A$ が正定値なので $\boldsymbol{e}^{*}A\boldsymbol{e}$ は $\boldsymbol{e} \ne \boldsymbol{0}$ で正であり、これを長さの 2 乗とみなしたものです。次の補題は、誤差がこの長さで見て毎回確実に縮むための分割の条件を与えます。証明では $\|\boldsymbol{e}\|_A^2 - \|G\boldsymbol{e}\|_A^2$ を計算し、それがちょうど $M + M^{*} - A$ の形の二次形式になることから、この条件が出てきます。

<Lemma id="lem-energy-decrease" title="エネルギーノルムが減る分割">
$A$ を正定値 Hermite 行列、$A = M - N$ を分割とし、$M + M^{*} - A$ が正定値 Hermite 行列であるとする。このとき $G = M^{-1}N = I - M^{-1}A$ について、任意の $\boldsymbol{e} \ne \boldsymbol{0}$ で $\|G\boldsymbol{e}\|_A < \|\boldsymbol{e}\|_A$ であり、$\rho(G) < 1$ である。
</Lemma>

<Proof of="lem-energy-decrease">
$\boldsymbol{y} = M^{-1}A\boldsymbol{e}$ とおくと $G\boldsymbol{e} = \boldsymbol{e} - \boldsymbol{y}$、$A\boldsymbol{e} = M\boldsymbol{y}$ です。
$$
\|G\boldsymbol{e}\|_A^2 = \boldsymbol{e}^{*}A\boldsymbol{e} - \boldsymbol{y}^{*}A\boldsymbol{e} - \boldsymbol{e}^{*}A\boldsymbol{y} + \boldsymbol{y}^{*}A\boldsymbol{y}
$$
で、$\boldsymbol{y}^{*}A\boldsymbol{e} = \boldsymbol{y}^{*}M\boldsymbol{y}$、$\boldsymbol{e}^{*}A\boldsymbol{y} = (A\boldsymbol{e})^{*}\boldsymbol{y} = \boldsymbol{y}^{*}M^{*}\boldsymbol{y}$ なので
$$
\|\boldsymbol{e}\|_A^2 - \|G\boldsymbol{e}\|_A^2 = \boldsymbol{y}^{*}(M + M^{*} - A)\boldsymbol{y}
$$
です。$A$, $M$ は正則なので $\boldsymbol{e} \ne \boldsymbol{0}$ なら $\boldsymbol{y} \ne \boldsymbol{0}$ で、右辺は正です。固有値については、$G\boldsymbol{e} = \lambda\boldsymbol{e}$（$\boldsymbol{e} \ne \boldsymbol{0}$）なら $\|G\boldsymbol{e}\|_A = |\lambda|\|\boldsymbol{e}\|_A$ で、$\|\boldsymbol{e}\|_A > 0$ なので $|\lambda| < 1$ です。
</Proof>

<Theorem id="thm-ostrowski-reich" title="Ostrowski–Reich の定理">
$A$ を正定値 Hermite 行列とする。SOR 法は $0 < \omega < 2$ のとき任意の初期値で収束し、反復ごとに誤差のエネルギーノルムは真に減少する。
</Theorem>

<Proof of="thm-ostrowski-reich">
$A$ は Hermite なので $U = L^{*}$ で、$A = D - L - L^{*}$ です。$D$ の対角成分 $a_{ii} = \boldsymbol{e}_i^{*}A\boldsymbol{e}_i$ は正定値性から正です。SOR 法の $M = \omega^{-1}D - L$ について
$$
M + M^{*} - A = \frac{2}{\omega}D - L - L^{*} - (D - L - L^{*}) = \Bigl(\frac{2}{\omega} - 1\Bigr)D
$$
で、$0 < \omega < 2$ なら $2/\omega - 1 > 0$ なので正定値です。<Ref to="lem-energy-decrease" /> と <Ref to="thm-stationary-convergence" /> から主張が従います。
</Proof>

<Corollary id="cor-gauss-seidel-spd" title="正定値行列の Gauss–Seidel 法">
正定値 Hermite 行列に対する Gauss–Seidel 法は任意の初期値で収束する。
</Corollary>

<Proof of="cor-gauss-seidel-spd">
Gauss–Seidel 法は $\omega = 1$ の SOR 法なので、<Ref to="thm-ostrowski-reich" /> の特別な場合です。
</Proof>

Jacobi 法には同じ主張がありません。$M = D$ なので条件は「$2D - A$ が正定値」で、これは正定値な $A$ でも成り立つとは限りません（演習を参照）。

<Theorem id="thm-kahan-sor" title="Kahan の必要条件">
$A$ の対角成分がすべて $0$ でないとき、任意の $\omega \ne 0$ について $\rho(\mathcal{L}_\omega) \ge |\omega - 1|$ である。とくに SOR 法が任意の初期値で収束するなら $0 < \omega < 2$（$\omega$ が実数のとき）である。
</Theorem>

<Proof of="thm-kahan-sor">
三角行列の行列式は対角成分の積（<Ref to="mathematics/linear-algebra/determinants#prop-basic" /> の 2）なので $\det(D - \omega L) = \det D$、$\det((1 - \omega)D + \omega U) = (1 - \omega)^n\det D$ です。積の定理（<Ref to="mathematics/linear-algebra/determinants#thm-product" />）から
$$
\det\mathcal{L}_\omega = \det(D - \omega L)^{-1}\det\bigl((1 - \omega)D + \omega U\bigr) = (1 - \omega)^n .
$$
行列式は重複を込めた固有値の積です（<Ref to="mathematics/linear-algebra/eigenvalues#cor-trace-det" />。複素数上で特性多項式は一次式の積に分解する）。$n$ 個の固有値の絶対値の積が $|1 - \omega|^n$ なので、そのうち最大のものは $|1 - \omega|$ 以上です。後半は <Ref to="thm-stationary-convergence" /> の 2 から、$|\omega - 1| < 1$ が必要だからです。
</Proof>

<Example id="ex-jacobi-diverges" title="Jacobi 法は発散し Gauss–Seidel 法は収束する例">
$$
A = \begin{pmatrix} 2 & -1 & 1 \\ 2 & 2 & 2 \\ -1 & -1 & 2 \end{pmatrix}
$$
は対角優位でも正定値（対称）でもありません。Jacobi 法の反復行列は
$$
G_{\mathrm{J}} = \begin{pmatrix} 0 & 1/2 & -1/2 \\ -1 & 0 & -1 \\ 1/2 & 1/2 & 0 \end{pmatrix},\qquad \det(tI - G_{\mathrm{J}}) = t^3 + \tfrac{5}{4}t
$$
で、固有値は $0, \pm i\sqrt{5}/2$、$\rho(G_{\mathrm{J}}) = \sqrt{5}/2 \approx 1.118 > 1$ なので発散します。一方 Gauss–Seidel 法では
$$
G_{\mathrm{GS}} = (D - L)^{-1}U = \begin{pmatrix} 0 & 1/2 & -1/2 \\ 0 & -1/2 & -1/2 \\ 0 & 0 & -1/2 \end{pmatrix}
$$
が上三角で、固有値は $0, -1/2, -1/2$、$\rho(G_{\mathrm{GS}}) = 1/2$ なので収束します（$G_{\mathrm{GS}}$ は $(D - L)G_{\mathrm{GS}} = U$ を第 1 行から順に解けば求まります）。どちらが速いかは行列しだいで、逆向きの例（Jacobi 法だけが収束する）もあります。
</Example>

## 4. 矛盾なく順序づけられた行列と Young の定理

SOR 法の $\omega$ をどう選ぶかに答えるには、$\mathcal{L}_\omega$ の固有値を Jacobi 法の固有値で表す必要があります。それが可能になる行列の構造が次の性質です。以下 $A = D - L - U$、$D$ は正則とし、$\alpha \ne 0$ に対して
$$
B(\alpha) = \alpha D^{-1}L + \alpha^{-1}D^{-1}U
$$
とおきます。$B(1) = G_{\mathrm{J}}$ です。

SOR 法の反復行列には $L$ と $U$ が別々の重みで入っています。これを Jacobi 法の反復行列と結びつけるには、$L$ の部分を $\alpha$ 倍、$U$ の部分を $\alpha^{-1}$ 倍しても固有値が変わらない、という性質があると都合がよくなります。次の定義はその性質を取り出したもので、$\alpha$ はこのためだけに導入する補助のパラメータです。具体的には、三重対角行列や格子の行列がこの性質をもつことを、次の補題で確かめます。

<Definition id="def-consistently-ordered" title="矛盾なく順序づけられた行列">
すべての $\alpha \ne 0$ について $B(\alpha)$ の特性多項式 $\det(tI - B(\alpha))$ が $\alpha$ によらないとき、$A$ は**矛盾なく順序づけられている**（consistently ordered）という。
</Definition>

定義は抽象的ですが、次の補題で判定できます。

<Lemma id="lem-consistent-ordering-criterion" title="番号づけによる判定">
整数 $\gamma(1), \ldots, \gamma(n)$ があって、$i \ne j$、$a_{ij} \ne 0$ のとき、$j < i$ なら $\gamma(i) - \gamma(j) = 1$、$j > i$ なら $\gamma(i) - \gamma(j) = -1$ が成り立つとする。このとき $A$ は矛盾なく順序づけられている。とくに次の行列はそうである。

1. 三重対角行列（$\gamma(i) = i$）。
2. $m\times m$ の格子の点 $(p, q)$（$1 \le p, q \le m$）を辞書式（自然な順序）に並べ、上下左右の隣接点の間にだけ非対角成分をもつ行列（$\gamma(p, q) = p + q$）。
3. 2 と同じ格子で、$p + q$ が偶数の点（赤）をすべて先に、奇数の点（黒）を後に並べた行列（赤黒順序。$\gamma = 0$（赤）、$1$（黒））。
</Lemma>

<Proof of="lem-consistent-ordering-criterion">
$S = \operatorname{diag}(\alpha^{\gamma(1)}, \ldots, \alpha^{\gamma(n)})$ とおくと、$S B(1) S^{-1}$ の $(i, j)$ 成分は $\alpha^{\gamma(i) - \gamma(j)}$ と $B(1)$ の $(i, j)$ 成分の積です。$B(1)$ の $(i, j)$ 成分は $j < i$ なら $D^{-1}L$ の、$j > i$ なら $D^{-1}U$ の成分で、$a_{ij} \ne 0$ のときだけ零でありません。仮定からその位置で $\alpha^{\gamma(i) - \gamma(j)}$ は $j < i$ なら $\alpha$、$j > i$ なら $\alpha^{-1}$ なので、$SB(1)S^{-1} = B(\alpha)$ です。相似な行列の特性多項式は等しい（積の定理 <Ref to="mathematics/linear-algebra/determinants#thm-product" /> から $\det(tI - SB S^{-1}) = \det S\det(tI - B)\det S^{-1}$）ので、主張が従います。

1 では非零の非対角成分は $j = i \pm 1$ だけです。2 では隣接点 $(p', q')$ は $(p \pm 1, q)$ か $(p, q \pm 1)$ で、辞書式の順序で前にあるのは $(p - 1, q)$ と $(p, q - 1)$、すなわち $\gamma$ が $1$ 小さい点です。3 では赤の点の隣接点はすべて黒、黒の隣接点はすべて赤（$p + q$ の偶奇が変わる）で、黒は赤より後に並ぶので、$j < i$ の非零成分は（黒の行，赤の列）、$j > i$ は（赤の行，黒の列）に限られます。
</Proof>

<Figure caption="格子点を市松模様に塗り分けた赤黒順序。赤の点（p + q が偶数）の上下左右の隣は必ず黒で、黒の隣は必ず赤である。">
<svg viewBox="0 0 360 380" width="100%" role="img" aria-label="5×5 の格子点を市松模様に赤と黒で塗り分けた図。どの点も上下左右の隣は反対の色になる。">
  <g stroke="currentColor" stroke-width="1.5" opacity="0.4">
    <line x1="60" y1="60" x2="300" y2="60" />
    <line x1="60" y1="120" x2="300" y2="120" />
    <line x1="60" y1="180" x2="300" y2="180" />
    <line x1="60" y1="240" x2="300" y2="240" />
    <line x1="60" y1="300" x2="300" y2="300" />
    <line x1="60" y1="60" x2="60" y2="300" />
    <line x1="120" y1="60" x2="120" y2="300" />
    <line x1="180" y1="60" x2="180" y2="300" />
    <line x1="240" y1="60" x2="240" y2="300" />
    <line x1="300" y1="60" x2="300" y2="300" />
  </g>
  <g fill="#d9534f">
    <circle cx="60" cy="60" r="11" />
    <circle cx="180" cy="60" r="11" />
    <circle cx="300" cy="60" r="11" />
    <circle cx="120" cy="120" r="11" />
    <circle cx="240" cy="120" r="11" />
    <circle cx="60" cy="180" r="11" />
    <circle cx="180" cy="180" r="11" />
    <circle cx="300" cy="180" r="11" />
    <circle cx="120" cy="240" r="11" />
    <circle cx="240" cy="240" r="11" />
    <circle cx="60" cy="300" r="11" />
    <circle cx="180" cy="300" r="11" />
    <circle cx="300" cy="300" r="11" />
  </g>
  <g fill="currentColor">
    <circle cx="120" cy="60" r="11" />
    <circle cx="240" cy="60" r="11" />
    <circle cx="60" cy="120" r="11" />
    <circle cx="180" cy="120" r="11" />
    <circle cx="300" cy="120" r="11" />
    <circle cx="120" cy="180" r="11" />
    <circle cx="240" cy="180" r="11" />
    <circle cx="60" cy="240" r="11" />
    <circle cx="180" cy="240" r="11" />
    <circle cx="300" cy="240" r="11" />
    <circle cx="120" cy="300" r="11" />
    <circle cx="240" cy="300" r="11" />
  </g>
  <g font-size="14" fill="currentColor">
    <circle cx="100" cy="350" r="8" fill="#d9534f" />
    <text x="116" y="355">赤</text>
    <circle cx="200" cy="350" r="8" />
    <text x="216" y="355">黒</text>
  </g>
</svg>
</Figure>

<Theorem id="thm-young" title="Young の定理">
$A$ は矛盾なく順序づけられているとし、$\omega \ne 0$ とする。

1. $\mu$ が $G_{\mathrm{J}}$ の固有値なら $-\mu$ もそうである。
2. $\mu$ が $G_{\mathrm{J}}$ の固有値で、$\lambda$ が
$$
(\lambda + \omega - 1)^2 = \lambda\,\omega^2\mu^2
$$
を満たすなら、$\lambda$ は $\mathcal{L}_\omega$ の固有値である。逆に $\lambda \ne 0$ が $\mathcal{L}_\omega$ の固有値なら、上の関係を満たす $G_{\mathrm{J}}$ の固有値 $\mu$ がある。
3. とくに $\rho(G_{\mathrm{GS}}) = \rho(G_{\mathrm{J}})^2$ である。
</Theorem>

証明の方針は次のとおりです。$\det(\lambda I - \mathcal{L}_\omega)$ を、$B(\alpha)$ の特性多項式で書き直します。そのとき $L$ の係数が $\lambda\omega$、$U$ の係数が $\omega$ と食い違うので、$\lambda$ の平方根 $s$ を使って $L$ に $s$、$U$ に $s^{-1}$ を掛けた形に直し、共通の因子 $\omega s$ をくくり出します。こうすると $B(s)$ が現れ、矛盾なく順序づけられているという仮定で $s$ によらない特性多項式に置き換えられます。

<Proof of="thm-young">
$p(t) = \det(tI - G_{\mathrm{J}})$ とおくと、定義から $\det(tI - B(\alpha)) = p(t)$ がすべての $\alpha \ne 0$ で成り立ちます。

1. $B(-1) = -G_{\mathrm{J}}$ なので $p(t) = \det(tI + G_{\mathrm{J}}) = (-1)^n p(-t)$ で、$p(\mu) = 0$ なら $p(-\mu) = 0$ です。

2. 積の定理（<Ref to="mathematics/linear-algebra/determinants#thm-product" />）と $\det(D - \omega L) = \det D$（三角行列、<Ref to="mathematics/linear-algebra/determinants#prop-basic" /> の 2）から
$$
\det(\lambda I - \mathcal{L}_\omega) = \frac{\det\bigl(\lambda(D - \omega L) - (1 - \omega)D - \omega U\bigr)}{\det D} = \det\bigl((\lambda + \omega - 1)I - \lambda\omega D^{-1}L - \omega D^{-1}U\bigr)
$$
です。$\lambda \ne 0$ のとき、$\lambda$ の平方根の 1 つを $s$ とすると $\lambda\omega D^{-1}L + \omega D^{-1}U = \omega s\,B(s)$ なので
$$
\det(\lambda I - \mathcal{L}_\omega) = \det\bigl((\lambda + \omega - 1)I - \omega sB(s)\bigr) = (\omega s)^n\,p\Bigl(\frac{\lambda + \omega - 1}{\omega s}\Bigr)
$$
です。よって $\lambda \ne 0$ が $\mathcal{L}_\omega$ の固有値であることと、$\nu = (\lambda + \omega - 1)/(\omega s)$ が $G_{\mathrm{J}}$ の固有値であることは同値です。$\nu$ が固有値なら $\mu = \nu$ が関係式を満たし（両辺を 2 乗）、逆に関係式を満たす固有値 $\mu$ があれば $\nu = \pm\mu$ で、1 から $\nu$ も固有値です。これで $\lambda \ne 0$ の場合が示せました。$\lambda = 0$ が関係式を満たすのは $\omega = 1$ のときで、このとき $\mathcal{L}_1 = (D - L)^{-1}U$ は $\det U = 0$（$U$ は対角成分が $0$ の三角行列）から特異なので、$0$ は固有値です。

3. $\omega = 1$ では関係式は $\lambda^2 = \lambda\mu^2$ で、零でない固有値は $\lambda = \mu^2$（$\mu$ は $G_{\mathrm{J}}$ の固有値）と一致します。$\mathcal{L}_1$ の固有値は $0$ と $\{\mu^2\}$ の部分集合で、2 の前半から各 $\mu^2$ は実際に固有値なので、$\rho(G_{\mathrm{GS}}) = \max|\mu|^2 = \rho(G_{\mathrm{J}})^2$ です。
</Proof>

3 の意味は、Gauss–Seidel 法は Jacobi 法のちょうど 2 倍の漸近収束率をもつ、ということです（$-\ln\rho^2 = -2\ln\rho$）。さらに $\omega$ を最適に選ぶと、収束率は桁違いに改善します。

<Corollary id="cor-sor-optimal" title="最適な緩和係数">
$A$ は矛盾なく順序づけられており、$G_{\mathrm{J}}$ の固有値はすべて実数で $\rho_{\mathrm{J}} = \rho(G_{\mathrm{J}}) < 1$ とする。$0 < \omega < 2$ について
$$
\rho(\mathcal{L}_\omega) = \begin{cases} \dfrac{1}{4}\Bigl(\omega\rho_{\mathrm{J}} + \sqrt{\omega^2\rho_{\mathrm{J}}^2 - 4(\omega - 1)}\Bigr)^2 & (0 < \omega \le \omega_{\mathrm{opt}}) \\[2mm] \omega - 1 & (\omega_{\mathrm{opt}} \le \omega < 2) \end{cases},\qquad \omega_{\mathrm{opt}} = \frac{2}{1 + \sqrt{1 - \rho_{\mathrm{J}}^2}}
$$
であり、$\rho(\mathcal{L}_\omega)$ は $\omega = \omega_{\mathrm{opt}}$ でだけ最小値 $\omega_{\mathrm{opt}} - 1$ をとる。
</Corollary>

証明の方針は次のとおりです。Young の定理により、$\mathcal{L}_\omega$ の固有値は Jacobi 法の固有値 $\mu$ ごとに、$\lambda$ の 2 次方程式の根として決まります。まず 1 つの $\mu$ について根の絶対値を調べ、それが $|\mu|$ とともに増えることから、最大の $\rho_{\mathrm{J}}$ の場合だけを見ればよいと分かります。$\omega$ が小さいうちは根が実数で、$\omega$ を大きくすると下がります。$\omega_{\mathrm{opt}}$ を超えると根が複素数になり、絶対値が $\omega - 1$ に固定されて今度は $\omega$ とともに増えるので、境目の $\omega_{\mathrm{opt}}$ が最小になります。

<Proof of="cor-sor-optimal">
**1 つの $\mu$ に対する根.** 実数 $\mu$ を固定し、$m = |\mu|$ とします。関係式 $(\lambda + \omega - 1)^2 = \lambda\omega^2\mu^2$ は $\lambda$ の 2 次方程式
$$
\lambda^2 - \bigl(\omega^2m^2 - 2(\omega - 1)\bigr)\lambda + (\omega - 1)^2 = 0
$$
で、判別式は $\omega^2m^2\,d$、$d = \omega^2m^2 - 4(\omega - 1)$ です。

- $d < 0$ のとき（このとき $\omega > 1$）、2 根は共役な複素数で、絶対値の 2 乗は根の積 $(\omega - 1)^2$ に等しいので、どちらも絶対値 $\omega - 1$ です。
- $d \ge 0$ のとき、2 根は実数で、積 $(\omega - 1)^2 \ge 0$ と和 $\omega^2m^2 - 2(\omega - 1) \ge 0$（$\omega \ge 1$ なら $d \ge 0$ から和 $\ge 2(\omega - 1)$、$\omega < 1$ なら各項が非負）から非負です。大きい方の根は、展開して確かめられるとおり $\bigl((\omega m + \sqrt{d})/2\bigr)^2$ です。

そこで $g(\omega, m)$ を、$d \ge 0$ なら $\bigl((\omega m + \sqrt{d})/2\bigr)^2$、$d < 0$ なら $\omega - 1$ と定めると、$g$ は 2 根の絶対値の大きい方です。$\omega$ を固定すると、$d \ge 0$ の範囲では $\omega m$ も $d$ も $m$ について増加し、境界 $d = 0$ では $g = \omega^2m^2/4 = \omega - 1$ なので、$g(\omega, \cdot)$ は $m \ge 0$ について非減少です。

**$\rho(\mathcal{L}_\omega) = g(\omega, \rho_{\mathrm{J}})$.** <Ref to="thm-young" /> の 2 の後半から、$\mathcal{L}_\omega$ の零でない固有値は、ある固有値 $\mu$（実数で $|\mu| \le \rho_{\mathrm{J}}$）についての根なので、絶対値は $g(\omega, |\mu|) \le g(\omega, \rho_{\mathrm{J}})$ 以下です。一方 $\rho_{\mathrm{J}}$ または $-\rho_{\mathrm{J}}$ は固有値なので、2 の前半から絶対値 $g(\omega, \rho_{\mathrm{J}})$ の根は $\mathcal{L}_\omega$ の固有値です。

**$\omega$ についての形.** $\rho = \rho_{\mathrm{J}}$ とし、$d(\omega) = \rho^2\omega^2 - 4\omega + 4$ とおきます。$d$ の零点は $\omega = 2/(1 \pm \sqrt{1 - \rho^2})$ で、小さい方が $\omega_{\mathrm{opt}} \in [1, 2)$、大きい方は $2$ 以上です（$\rho = 0$ なら $d = 4 - 4\omega$ で零点は $1 = \omega_{\mathrm{opt}}$ だけ）。よって $0 < \omega \le \omega_{\mathrm{opt}}$ で $d \ge 0$、$\omega_{\mathrm{opt}} \le \omega < 2$ で $d \le 0$ となり、主張の式を得ます（$\omega = \omega_{\mathrm{opt}}$ では両方の式が $\omega - 1$ に一致します）。

**単調性.** $\omega_{\mathrm{opt}} \le \omega < 2$ では $\omega - 1$ は増加です。$0 < \omega < \omega_{\mathrm{opt}}$ では $d > 0$ で、$s(\omega) = (\omega\rho + \sqrt{d})/2 > 0$ の導関数は
$$
s'(\omega) = \frac{1}{2}\Bigl(\rho - \frac{2 - \rho^2\omega}{\sqrt{d}}\Bigr)
$$
です。$(2 - \rho^2\omega)^2 - \rho^2d = 4(1 - \rho^2) > 0$ と $2 - \rho^2\omega > 0$ から $2 - \rho^2\omega > \rho\sqrt{d}$ なので $s' < 0$ で、$s^2$ は減少です。$s^2$ は $\omega_{\mathrm{opt}}$ で連続に $\omega_{\mathrm{opt}} - 1$ につながるので、最小は $\omega_{\mathrm{opt}}$ でだけとられます。
</Proof>

<Figure caption="ρ_J = cos(π/8) ≈ 0.924（7×7 格子の離散 Laplace 行列）のときの ρ(𝓛_ω)。ω_opt ≈ 1.446 の左では急に下がり（平方根の特異性）、右では傾き 1 の直線 ω − 1 になる。ω を最適値より少し大きめにとる方が安全である。">
<svg viewBox="0 0 720 380" width="100%" role="img" aria-label="SOR 法の反復行列のスペクトル半径を緩和係数 omega の関数として描いた曲線。omega_opt で最小になり、その右は直線。">
  <g stroke="currentColor" stroke-width="1" opacity="0.35">
    <line x1="70" y1="330" x2="670" y2="330" />
    <line x1="70" y1="30" x2="70" y2="330" />
    <line x1="70" y1="30" x2="670" y2="30" stroke-dasharray="4 4" />
    <line x1="70" y1="180" x2="670" y2="180" stroke-dasharray="4 4" />
    <line x1="504" y1="30" x2="504" y2="330" stroke-dasharray="4 4" />
  </g>
  <g fill="currentColor" font-size="13" opacity="0.8">
    <text x="62" y="334" text-anchor="end">0</text>
    <text x="62" y="184" text-anchor="end">0.5</text>
    <text x="62" y="34" text-anchor="end">1</text>
    <text x="70" y="352" text-anchor="middle">0</text>
    <text x="220" y="352" text-anchor="middle">0.5</text>
    <text x="370" y="352" text-anchor="middle">1</text>
    <text x="520" y="352" text-anchor="middle">1.5</text>
    <text x="670" y="352" text-anchor="middle">2</text>
    <text x="680" y="334">ω</text>
    <text x="504" y="372" text-anchor="middle">ω_opt</text>
  </g>
  <polyline fill="none" stroke="var(--sl-color-accent)" stroke-width="2.5" stroke-linejoin="round" points="100,32 130,35 160,38 190,41 220,45 250,49 280,54 310,59 340,66 370,74 400,84 430,97 460,115 490,147 496,158 499,166 502,177 503.5,187 504,196 520,180 550,150 580,120 610,90 640,60 655,45" />
  <g fill="var(--sl-color-accent)">
    <circle cx="370" cy="74" r="4" />
    <circle cx="504" cy="196" r="4" />
  </g>
  <g fill="currentColor" font-size="13">
    <text x="378" y="66">Gauss–Seidel（0.854）</text>
    <text x="512" y="214">最小値 ω_opt − 1 ≈ 0.446</text>
  </g>
</svg>
</Figure>

## 5. モデル問題での収束率

正方形 $(0,1)^2$ 上の $-\Delta u = f$、境界で $u = 0$ を、格子幅 $h = 1/(m+1)$ の 5 点差分で離散化します。内部の格子点 $(p, q)$（$1 \le p, q \le m$）を自然な順序に並べると、係数行列は（$h^2$ を掛けて）
$$
A = I_m \otimes T + T \otimes I_m,\qquad T = \begin{pmatrix} 2 & -1 & & \\ -1 & 2 & \ddots & \\ & \ddots & \ddots & -1 \\ & & -1 & 2 \end{pmatrix} \in \mathbb{R}^{m\times m}
$$
です（$\otimes$ は Kronecker 積）。1 次元のモデル問題は $A = T$ です。

<Proposition id="prop-model-problem-rates" title="離散 Laplace 方程式の収束率">
1 次元（$A = T$）と 2 次元（$A = I \otimes T + T \otimes I$）のどちらでも、$h = 1/(m+1)$ として
$$
\rho_{\mathrm{J}} = \cos\pi h,\qquad \rho_{\mathrm{GS}} = \cos^2\pi h,\qquad \omega_{\mathrm{opt}} = \frac{2}{1 + \sin\pi h},\qquad \rho(\mathcal{L}_{\omega_{\mathrm{opt}}}) = \frac{1 - \sin\pi h}{1 + \sin\pi h}
$$
が成り立つ。2 次元では自然な順序でも赤黒順序でも同じである。$h \to 0$ で $-\ln\rho_{\mathrm{J}} \approx \pi^2h^2/2$、$-\ln\rho_{\mathrm{GS}} \approx \pi^2h^2$、$-\ln\rho(\mathcal{L}_{\omega_{\mathrm{opt}}}) \approx 2\pi h$ である。
</Proposition>

<Proof of="prop-model-problem-rates">
**Jacobi 法の固有値.** $\theta_k = k\pi h$（$k = 1, \ldots, m$）とおきます。三重対角 Toeplitz 行列の固有値の補題（<Ref to="mathematics/numerical-linear-algebra/norms-and-conditioning#lem-tridiagonal-toeplitz-eigen" />）を $\alpha = 2$, $\beta = -1$ で使うと、$T$ の固有値は相異なる $\tau_k = 2 - 2\cos\theta_k$ で、固有ベクトルは $\boldsymbol{v}_k = (\sin j\theta_k)_j$ です。

1 次元では $D = 2I$ なので $G_{\mathrm{J}} = I - T/2$ の固有値は $1 - \tau_k/2 = \cos\theta_k$ です。

2 次元では Kronecker 積の性質 $(P \otimes Q)(\boldsymbol{x} \otimes \boldsymbol{y}) = P\boldsymbol{x} \otimes Q\boldsymbol{y}$（定義から成分を比べればよい）により
$$
A(\boldsymbol{v}_j \otimes \boldsymbol{v}_k) = \boldsymbol{v}_j \otimes T\boldsymbol{v}_k + T\boldsymbol{v}_j \otimes \boldsymbol{v}_k = (\tau_j + \tau_k)\,\boldsymbol{v}_j \otimes \boldsymbol{v}_k
$$
です。$T$ は対称なので相異なる固有値の固有ベクトルは直交し（$\tau_j\boldsymbol{v}_j^{\mathsf{T}}\boldsymbol{v}_k = (T\boldsymbol{v}_j)^{\mathsf{T}}\boldsymbol{v}_k = \boldsymbol{v}_j^{\mathsf{T}}T\boldsymbol{v}_k = \tau_k\boldsymbol{v}_j^{\mathsf{T}}\boldsymbol{v}_k$）、$(\boldsymbol{x} \otimes \boldsymbol{y})^{\mathsf{T}}(\boldsymbol{x}' \otimes \boldsymbol{y}') = (\boldsymbol{x}^{\mathsf{T}}\boldsymbol{x}')(\boldsymbol{y}^{\mathsf{T}}\boldsymbol{y}')$ なので、$m^2$ 個の $\boldsymbol{v}_j \otimes \boldsymbol{v}_k$ は零でなく互いに直交します。直交する零でないベクトルは一次独立なので、これは $\mathbb{R}^{m^2}$ の基底で、$A$ の固有値は $\tau_j + \tau_k$ で尽きます。$D = 4I$ なので $G_{\mathrm{J}} = I - A/4$ の固有値は $(\cos\theta_j + \cos\theta_k)/2$ です。

どちらの場合も固有値は実数で、絶対値の最大は $j = k = 1$（または $j = k = m$）の $\cos\pi h$ です。2 次元の赤黒順序は自然な順序の行列を置換行列 $P$ で $P^{\mathsf{T}}AP$ と並べ替えたもので、対角成分はすべて $4$ のままなので $G_{\mathrm{J}}$ も $P^{\mathsf{T}}G_{\mathrm{J}}P$ になり、固有値は変わりません。

**SOR 法.** 1 次元の $T$ は三重対角、2 次元は自然な順序でも赤黒順序でも <Ref to="lem-consistent-ordering-criterion" /> の条件を満たすので、矛盾なく順序づけられています。<Ref to="thm-young" /> の 3 から $\rho_{\mathrm{GS}} = \cos^2\pi h$、<Ref to="cor-sor-optimal" /> から $\omega_{\mathrm{opt}} = 2/(1 + \sqrt{1 - \cos^2\pi h}) = 2/(1 + \sin\pi h)$ と $\rho(\mathcal{L}_{\omega_{\mathrm{opt}}}) = \omega_{\mathrm{opt}} - 1 = (1 - \sin\pi h)/(1 + \sin\pi h)$ です。

**漸近形.** $\ln\cos x = -x^2/2 + O(x^4)$、$\ln\bigl((1 - s)/(1 + s)\bigr) = -2s + O(s^3)$ と $\sin\pi h = \pi h + O(h^3)$ から従います。
</Proof>

誤差を $10^{-d}$ 倍にする反復回数は、Jacobi 法で約 $2d\ln 10/(\pi^2h^2)$、Gauss–Seidel 法でその半分、最適 SOR 法で約 $d\ln 10/(2\pi h)$ です。格子を 2 倍細かくすると、前の 2 つは 4 倍、最適 SOR 法は 2 倍に増えます。1 回の反復の手間は未知数の個数 $m^2 \approx h^{-2}$ に比例するので、全体の手間は $h^{-4}$ と $h^{-3}$ です。

次のコードで確かめます。Gauss–Seidel 法と SOR 法は、配列演算で書けるよう赤黒順序で実装しました（<Ref to="prop-model-problem-rates" /> により収束率は自然な順序と同じです）。

```python
# Python 3.12.10 / NumPy 2.5.2（x86-64）
import numpy as np

def nbr(u):                 # 上下左右の和（境界は 0）
    return u[:-2, 1:-1] + u[2:, 1:-1] + u[1:-1, :-2] + u[1:-1, 2:]

def count(m, method, w=1.0, tol=1e-8):
    b = np.full((m, m), 1.0 / (m + 1) ** 2)     # f = 1 の右辺
    u = np.zeros((m + 2, m + 2))
    red = np.indices((m, m)).sum(axis=0) % 2 == 0
    for k in range(1, 10**6):
        if method == "J":
            u[1:-1, 1:-1] = (b + nbr(u)) / 4
        else:                # 赤黒順序の SOR（w = 1 で Gauss-Seidel）
            for c in (red, ~red):
                v = u[1:-1, 1:-1]
                v[c] = (1 - w) * v[c] + w * ((b + nbr(u)) / 4)[c]
        r = b - 4 * u[1:-1, 1:-1] + nbr(u)
        if np.linalg.norm(r) <= tol * np.linalg.norm(b):
            return k

print(" 1/h    J(予測)       GS(予測)     SOR(予測)")
for m in (15, 31, 63):
    h = 1 / (m + 1)
    rj = np.cos(np.pi * h)
    w = 2 / (1 + np.sin(np.pi * h))
    pr = [np.log(1e-8) / np.log(x) for x in (rj, rj**2, w - 1)]
    k = [count(m, "J"), count(m, "S"), count(m, "S", w)]
    print(f"{m+1:4d}" + "".join(
        f"  {a:5d}({p:5.0f})" for a, p in zip(k, pr)))
```

```text
 1/h    J(予測)       GS(予測)     SOR(予測)
  16    942(  949)    480(  475)     61(   47)
  32   3779( 3816)   1926( 1908)    125(   94)
  64  15122(15283)   7705( 7642)    257(  188)
```

**検算.** (a) 予測は閉じた形の $\rho$ による $\ln 10^{-8}/\ln\rho$ です。(b) 反復行列のスペクトル半径そのものは次のコードで固有値を直接計算して照合します。(c) 格子幅を半分にするごとの回数の比は、Jacobi 法で $4.01, 4.00$、Gauss–Seidel 法で $4.01, 4.00$（$h^{-2}$）、最適 SOR 法で $2.05, 2.06$（$h^{-1}$）で、<Ref to="prop-model-problem-rates" /> の漸近形と合います。Jacobi 法・Gauss–Seidel 法の回数は予測と 1〜2% で一致します。最適 SOR 法の回数は予測の 1.3〜1.4 倍ですが、これは $\omega_{\mathrm{opt}}$ では $\mathcal{L}_\omega$ の固有値が重根になり（<Ref to="cor-sor-optimal" /> の証明の $d = 0$）、誤差が $\rho^k$ ではなく $k\rho^k$ のように減る成分をもつためです（<Ref to="rem-sor-nonnormal" />）。回数が $h^{-1}$ に比例することは変わりません。

```python
# Python 3.12.10 / NumPy 2.5.2（x86-64, OpenBLAS）
import numpy as np

m = 7                                  # 内部の格子点 7×7、h = 1/8
h = 1 / (m + 1)
T = 2 * np.eye(m) - np.eye(m, k=1) - np.eye(m, k=-1)
A = np.kron(np.eye(m), T) + np.kron(T, np.eye(m))   # 自然な順序
D = np.diag(np.diag(A))
L = -np.tril(A, -1)
U = -np.triu(A, 1)

def rho(G):
    return max(abs(np.linalg.eigvals(G)))

def sor(w):
    return np.linalg.solve(D - w * L, (1 - w) * D + w * U)

rj = np.cos(np.pi * h)
wopt = 2 / (1 + np.sin(np.pi * h))
rows = [("Jacobi", np.linalg.solve(D, L + U), rj),
        ("GS", sor(1.0), rj**2),
        ("SOR w=1.5", sor(1.5), 0.5),
        ("SOR w_opt", sor(wopt), wopt - 1)]
for name, G, th in rows:
    t = f"{th:.6f}"
    print(f"{name:10s} {rho(G):.6f}  {t}")
```

```text
Jacobi     0.923880  0.923880
GS         0.853553  0.853553
SOR w=1.5  0.500000  0.500000
SOR w_opt  0.446463  0.446463
```

**検算.** (a) 右の列は <Ref to="prop-model-problem-rates" /> の閉じた形と、$\omega = 1.5 > \omega_{\mathrm{opt}} \approx 1.446$ での <Ref to="cor-sor-optimal" /> の値 $\omega - 1$ です。(b) 左の列は自然な順序の反復行列を密行列として作り、`numpy.linalg.eigvals` で求めた値で、6 桁一致します。(c) 4 行は <Ref to="cor-sor-optimal" /> の曲線（上の図）の 3 点 $\omega = 1, \omega_{\mathrm{opt}}, 1.5$ にあたります。$\omega_{\mathrm{opt}}$ の行列は重根をもつため固有値の計算は丸めに敏感ですが、表示した 6 桁は既定のスレッド数と 1 スレッドで一致しました。

<Remark id="rem-sor-nonnormal" title="最適 SOR 法の過渡的な振る舞い">
$\omega = \omega_{\mathrm{opt}}$ では、Jacobi 法の固有値 $\pm\rho_{\mathrm{J}}$ に対応する $\mathcal{L}_\omega$ の固有値が重根になり、$\mathcal{L}_{\omega_{\mathrm{opt}}}$ は一般に対角化できません（2 次の Jordan 細胞をもつ）。このため $\|\mathcal{L}_\omega^k\|$ は $\rho^k$ ではなく $k\rho^{k-1}$ の程度で減り、実際の反復回数は $\ln\varepsilon/\ln\rho$ の予測より多くなります。実務では $\omega$ を $\omega_{\mathrm{opt}}$ よりわずかに大きくとることが多く、$\rho_{\mathrm{J}}$ が正確に分からないときも、<Ref to="cor-sor-optimal" /> の曲線の形（左側は急、右側は傾き 1）から大きめの側に外す方が損が小さくなります。Varga『Matrix Iterative Analysis』第 4 章、Young『Iterative Solution of Large Linear Systems』を参照してください。
</Remark>

<Remark id="rem-chebyshev-acceleration" title="Chebyshev 加速">
対称な反復行列 $G$ の固有値が $[-\rho, \rho]$ にあると分かっているとき、$\boldsymbol{x}_0, \ldots, \boldsymbol{x}_k$ の 1 次結合で誤差を $p_k(G)\boldsymbol{e}_0$（$p_k(1) = 1$ の $k$ 次多項式）の形にできます。$p_k$ を区間 $[-\rho, \rho]$ 上で最小最大にする Chebyshev 多項式に選ぶと、漸近収束率は最適 SOR 法と同じ $h^{-1}$ の程度まで改善します。$A$ が正定値 Hermite 行列なら、固有値の区間を知らずに同じことを自動で行うのが共役勾配法で、[Krylov 部分空間法 I の章](/mathematics/numerical-linear-algebra/lanczos-and-conjugate-gradient) の主題です。Golub–Van Loan『Matrix Computations』§11.2、Saad『Iterative Methods for Sparse Linear Systems』第 12 章を参照してください。
</Remark>

<Remark id="rem-multigrid-smoothing" title="多重格子法での平滑化">
<Ref to="prop-model-problem-rates" /> の証明の固有ベクトル $\boldsymbol{v}_j \otimes \boldsymbol{v}_k$ を見ると、Jacobi 法で遅く減るのは $\theta_j$, $\theta_k$ が小さい（格子に対してなめらかな）成分だけです。振動の激しい成分は、減衰つき Jacobi 法（$\omega = 4/5$ など）や Gauss–Seidel 法の数回の反復で格子幅によらない割合で減ります。なめらかになった誤差を粗い格子で解き直すのが多重格子法で、反復回数が $h$ によらない解法になります。Briggs–Henson–McCormick『A Multigrid Tutorial』2nd ed., SIAM, 2000 を参照してください。
</Remark>

## 6. 演習

<Exercise id="exr-jacobi-spd" difficulty="標準">
$1/2 < a < 1$ とし、$A = \begin{pmatrix} 1 & a & a \\ a & 1 & a \\ a & a & 1 \end{pmatrix}$ とする。$A$ は正定値であるが Jacobi 法は発散し、Gauss–Seidel 法は収束することを示せ。<Ref to="lem-energy-decrease" /> の条件 $2D - A$ の正定値性はどうなっているか。
<Solution>
$A = (1 - a)I + a\boldsymbol{1}\boldsymbol{1}^{\mathsf{T}}$ で、$\boldsymbol{1}$ の方向の固有値は $1 + 2a$、それに直交する 2 次元の空間では $1 - a$ です。どちらも正なので $A$ は正定値で、<Ref to="cor-gauss-seidel-spd" /> から Gauss–Seidel 法は収束します。$D = I$ なので $G_{\mathrm{J}} = I - A$ の固有値は $-2a$ と $a$（2 重）で、$\rho(G_{\mathrm{J}}) = 2a > 1$ から Jacobi 法は発散します（<Ref to="thm-stationary-convergence" />）。$2D - A = 2I - A$ の固有値は $1 - 2a < 0$ と $1 + a$ なので正定値でなく、補題の仮定が崩れています。
</Solution>
</Exercise>

<Exercise id="exr-model-iterations" difficulty="易">
2 次元のモデル問題で $h = 1/100$ とする。誤差を $10^{-6}$ 倍にするのに必要な反復回数を、Jacobi 法・Gauss–Seidel 法・最適 SOR 法について <Ref to="prop-model-problem-rates" /> の $\rho$ から見積もれ。
<Solution>
$\pi h \approx 0.0314159$ です。$\rho_{\mathrm{J}} = \cos\pi h \approx 0.9995066$ で $-\ln\rho_{\mathrm{J}} \approx 4.936\times10^{-4}$、回数は $6\ln 10/(4.936\times10^{-4}) \approx 13.82/(4.936\times10^{-4}) \approx 2.8\times10^4$ です。Gauss–Seidel 法はその半分の約 $1.4\times10^4$ 回です。最適 SOR 法は $\sin\pi h \approx 0.0314108$、$\rho = (1 - 0.0314108)/(1 + 0.0314108) \approx 0.939092$、$-\ln\rho \approx 0.06284$ なので約 $220$ 回です。
</Solution>
</Exercise>

<Exercise id="exr-sor-2x2" difficulty="標準">
$A = \begin{pmatrix} 2 & -1 \\ -1 & 2 \end{pmatrix}$ について、$\rho_{\mathrm{J}}$、$\rho_{\mathrm{GS}}$、$\omega_{\mathrm{opt}}$、$\rho(\mathcal{L}_{\omega_{\mathrm{opt}}})$ を求めよ。さらに $\mathcal{L}_\omega$ の特性多項式を直接計算し、$\omega = \omega_{\mathrm{opt}}$ で重根になることを確かめよ。
<Solution>
$G_{\mathrm{J}} = \begin{pmatrix} 0 & 1/2 \\ 1/2 & 0 \end{pmatrix}$ の固有値は $\pm 1/2$ なので $\rho_{\mathrm{J}} = 1/2$ です。$A$ は三重対角なので矛盾なく順序づけられており（<Ref to="lem-consistent-ordering-criterion" />）、<Ref to="thm-young" /> から $\rho_{\mathrm{GS}} = 1/4$、<Ref to="cor-sor-optimal" /> から $\omega_{\mathrm{opt}} = 2/(1 + \sqrt{3}/2) = 4(2 - \sqrt{3}) \approx 1.0718$、$\rho(\mathcal{L}_{\omega_{\mathrm{opt}}}) = 7 - 4\sqrt{3} \approx 0.0718$ です。直接計算すると $D - \omega L = \begin{pmatrix} 2 & 0 \\ -\omega & 2 \end{pmatrix}$、$(1 - \omega)D + \omega U = \begin{pmatrix} 2(1 - \omega) & \omega \\ 0 & 2(1 - \omega) \end{pmatrix}$ で、
$$
\det\bigl(\lambda(D - \omega L) - (1 - \omega)D - \omega U\bigr) = 4(\lambda + \omega - 1)^2 - \lambda\omega^2
$$
です。$\det(D - \omega L) = 4$ で割ると特性多項式は $(\lambda + \omega - 1)^2 - \lambda\omega^2/4$ で、これは Young の関係式で $\mu^2 = 1/4$ としたものです。$\lambda$ の 2 次式として判別式は $(\omega^2/4)\bigl(\omega^2/4 - 4(\omega - 1)\bigr)$ で、$\omega^2 - 16\omega + 16 = 0$ の小さい方の根 $\omega = 8 - 4\sqrt{3} = 4(2 - \sqrt{3})$ で $0$ になり、重根 $\lambda = \omega - 1 = 7 - 4\sqrt{3}$ をもちます。
</Solution>
</Exercise>

## 参考文献

- R. S. Varga『Matrix Iterative Analysis』2nd ed., Springer, 2000 — 第 3 章（定常反復の基本）、第 4 章（SOR 法と矛盾なく順序づけられた行列）。
- D. M. Young『Iterative Solution of Large Linear Systems』Academic Press, 1971 — SOR 法の理論の原典的な教科書。
- Y. Saad『Iterative Methods for Sparse Linear Systems』2nd ed., SIAM, 2003 — 第 4 章（基本的な反復法）、第 12 章（多項式前処理。Chebyshev 加速を含む）。
- G. H. Golub, C. F. Van Loan『Matrix Computations』4th ed., Johns Hopkins University Press, 2013 — §11.2（古典的な反復法）。
- W. L. Briggs, V. E. Henson, S. F. McCormick『A Multigrid Tutorial』2nd ed., SIAM, 2000 — 第 2 章（平滑化と誤差の周波数）。
