不動点反復法
この章の目標
不動点反復法の原理と収束条件を理解し、縮小写像の定理、収束速度の解析、ニュートン法との関係を学ぶ。
前提知識
- 第13章: 二分法
- 第9章: 打ち切り誤差
- 微分の基礎(収束解析に使用)
1. 定義と原理
方程式 $f(x) = 0$ を解く際、これを同値な形
$$x = g(x)$$に書き換え、初期値 $x_0$ から反復
を行って解(不動点)を求める手法を不動点反復法(Fixed-Point Iteration)と呼ぶ。
不動点の定義
関数 $g: \mathbb{R} \to \mathbb{R}$ に対し、$g(x^*) = x^*$ を満たす点 $x^*$ を $g$ の不動点(fixed point)と呼ぶ。これは $y = g(x)$ のグラフと直線 $y = x$ の交点に他ならない。
例えば $f(x) = x^2 - 3x + 1 = 0$ を解くには、$x = \dfrac{x^2 + 1}{3}$(すなわち $g(x) = \dfrac{x^2+1}{3}$)とおいて反復を行えばよい。ただし、$g$ の選び方によって収束・発散が変わるため、注意が必要である。
2. 収束条件
不動点反復法 $x_{n+1} = g(x_n)$ が不動点 $x^*$ に収束するかどうかは、$g$ の導関数の大きさで判定できる。
収束の十分条件
$g$ が $x^*$ を含む閉区間 $[a,b]$ 上で連続微分可能で、
$$|g'(x)| \leq L < 1 \quad \text{for all } x \in [a,b]$$かつ $g([a,b]) \subseteq [a,b]$ であれば、$[a,b]$ 内の任意の初期値 $x_0$ に対して反復列 $\{x_n\}$ は唯一の不動点 $x^*$ に収束する。
直感的には、$|g'(x^*)| < 1$ であれば $g$ は不動点の近傍で「縮小的」であり、反復ごとに誤差が小さくなる。逆に $|g'(x^*)| > 1$ のとき反復は発散する。
幾何学的解釈
- $0 < g'(x^*) < 1$: 反復は単調に(一方向から)不動点に接近する。
- $-1 < g'(x^*) < 0$: 反復は不動点を挟んで振動しながら収束する。
- $|g'(x^*)| > 1$: 反復は不動点から離れていき、発散する。
- $|g'(x^*)| = 1$: 境界ケースであり、収束・発散は高次の項に依存する。
3. Banach の不動点定理
不動点反復法の理論的基盤となるのが、Banach の不動点定理(縮小写像の原理)である。
Banach の不動点定理
$(X, d)$ を完備距離空間、$T: X \to X$ を縮小写像(すなわち $d(T(x), T(y)) \leq L \cdot d(x,y)$, $0 \leq L < 1$)とするとき、$T$ はただ一つの不動点 $x^*$ をもち、任意の $x_0 \in X$ に対して $x_n = T^n(x_0) \to x^*$ が成り立つ。
この定理から、さらに誤差の事前評価(a priori)と事後評価(a posteriori)が導かれる。
事前誤差評価(a priori)
$$|x_n - x^*| \leq \dfrac{L^n}{1 - L} |x_1 - x_0|$$事後誤差評価(a posteriori)
$$|x_n - x^*| \leq \dfrac{L}{1 - L} |x_n - x_{n-1}|$$事後評価は実用上重要であり、連続する2つの反復値の差から現在の誤差を見積もることができる。
4. アルゴリズム
不動点反復法
- 初期値 $x_0$ と許容誤差 $\varepsilon > 0$ を設定する。
- $x_{n+1} = g(x_n)$ を計算する。
- $|x_{n+1} - x_n| < \varepsilon$ ならば $x_{n+1}$ を解として終了。
- 反復回数が上限 $N_{\max}$ に達していなければ 2 に戻る。
擬似コードを以下に示す。
function fixedPointIteration(g, x0, tol, maxIter):
x = x0
for i = 1 to maxIter:
x_new = g(x)
if |x_new - x| < tol:
return x_new
x = x_new
return x // 収束しなかった場合
5. 収束の速さ
不動点 $x^*$ における $g$ の導関数の値によって、収束の次数が決まる。
線形収束
$g'(x^*) \neq 0$ かつ $|g'(x^*)| < 1$ のとき、誤差 $e_n = |x_n - x^*|$ は
$$e_{n+1} \approx |g'(x^*)| \cdot e_n$$を満たし、線形収束(1次収束)する。$|g'(x^*)|$ が小さいほど収束は速い。
2次収束
$g'(x^*) = 0$ かつ $g''(x^*) \neq 0$ のとき
$$e_{n+1} \approx \dfrac{|g''(x^*)|}{2} \cdot e_n^2$$となり、2次収束する。Newton 法はまさにこの条件を満たすように $g$ を構成している。
p次収束の一般条件
$g'(x^*) = g''(x^*) = \cdots = g^{(p-1)}(x^*) = 0$ かつ $g^{(p)}(x^*) \neq 0$ のとき、$p$ 次収束が得られる。
6. 計算例
例1: $f(x) = x - \cos x = 0$(収束する場合)
$g(x) = \cos x$ とおくと $x = g(x)$ である。$|g'(x)| = |\sin x| \leq \sin 1 \approx 0.841 < 1$ であるため、$x_0 = 0$ から出発すると収束する。
| $n$ | $x_n$ | $|x_n - x_{n-1}|$ |
|---|---|---|
| 0 | 0.000000 | — |
| 1 | 1.000000 | 1.000000 |
| 2 | 0.540302 | 0.459698 |
| 3 | 0.857553 | 0.317251 |
| 4 | 0.654290 | 0.203264 |
| 5 | 0.793480 | 0.139190 |
| 10 | 0.731404 | 0.012415 |
| 20 | 0.739085 | 0.000098 |
| 30 | 0.739085 | 0.000001 |
不動点は $x^* \approx 0.739085$ である。振動しながらゆっくり収束しており、これは $g'(x^*) = -\sin(0.739085) \approx -0.674$ が負であることに対応する。
例2: 同じ方程式の異なる変形(発散する場合)
同じ $x - \cos x = 0$ を $\cos x = x$ とみて $x = \cos^{-1} x$(すなわち $g(x) = \cos^{-1} x$)と変形すると、$g'(x) = -\dfrac{1}{\sqrt{1 - x^2}}$ となる。不動点 $x^* \approx 0.739$ では $|g'(x^*)| = \dfrac{1}{\sqrt{1 - 0.739^2}} \approx 1.48 > 1$ であるため、反復は不動点から離れて発散する。同じ方程式でも $g$ の選び方が収束性に決定的な影響を与えることを示す好例である。
7. Newton 法との関係
Newton 法は $g(x) = x - \dfrac{f(x)}{f'(x)}$ とおいた不動点反復法の特殊ケースである。この $g$ に対し
$$g'(x) = 1 - \dfrac{[f'(x)]^2 - f(x) f''(x)}{[f'(x)]^2} = \dfrac{f(x) f''(x)}{[f'(x)]^2}$$であるから、$f(x^*) = 0$ のとき $g'(x^*) = 0$ となり、2次収束が保証される。
同様に、割線法、Steffensen 法なども不動点反復法の枠組みで理解できる。
8. よくある質問
Q1. 不動点反復法とは何か
方程式 $f(x) = 0$ を $x = g(x)$ の形に変形し、初期値 $x_0$ から $x_{n+1} = g(x_n)$ を繰り返して不動点(解)を求める反復法である。収束条件は不動点 $x^*$ の近傍で $|g'(x^*)| < 1$ が成り立つことである。
Q2. 収束条件は何か
不動点 $x^*$ の近傍で $|g'(x^*)| < 1$ が成り立つことが十分条件である。$|g'(x^*)| < 1$ のとき線形収束し、特に $g'(x^*) = 0$ のとき少なくとも2次収束する。$|g'(x^*)| > 1$ のときは発散する。
Q3. Newton 法は不動点反復法の特殊な場合か
その通りである。Newton 法は $g(x) = x - f(x)/f'(x)$ とおいた不動点反復法の特殊ケースであり、$g'(x^*) = 0$ となるため少なくとも2次収束が保証される。
9. 参考資料
- Wikipedia「不動点定理」(日本語版)
- Wikipedia「Fixed-point iteration」(英語版)
- Wikipedia「Banach fixed-point theorem」(英語版)
- R. L. Burden & J. D. Faires, Numerical Analysis, 10th ed., Cengage, 2016.
- W. H. Press et al., Numerical Recipes, 3rd ed., Cambridge, 2007.
sangi での実装
不動点反復法は sangi の求根モジュール (Roots) の fixed_point_iteration で利用できる。
| 記事の手法 | sangi の関数 | 備考 |
|---|---|---|
| 不動点反復法(Picard 反復) | fixed_point_iteration | 反復写像 $g$ を渡し $x=g(x)$ を解く($f(x)=0$ の $f$ ではない) |
| Newton 法(特殊形) | newton_raphson | $g(x)=x-f(x)/f'(x)$ とした不動点反復に相当 |
引数は「反復関数 $g$ そのもの」を渡す点に注意($f(x)=0$ の $f$ ではない)。$g$ が縮小写像($|g'(x^*)|<1$)なら収束し、そうでなければ最大反復回数で converged=false となる。