不動点反復法

この章の目標

不動点反復法の原理と収束条件を理解し、縮小写像の定理、収束速度の解析、ニュートン法との関係を学ぶ。

前提知識

目次

1. 定義と原理

方程式 $f(x) = 0$ を解く際、これを同値な形

$$x = g(x)$$

に書き換え、初期値 $x_0$ から反復

$$x_{n+1} = g(x_n), \quad n = 0, 1, 2, \ldots$$

を行って解(不動点)を求める手法を不動点反復法(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$ の選び方によって収束・発散が変わるため、注意が必要である。

0 / 0
図1. 不動点反復法の蜘蛛の巣図(cobweb diagram)のアニメーション。$g(x) = \cos x$、初期値 $x_0 = 0$。$y = g(x)$ と $y = x$ の交点が不動点 $x^* \approx 0.739$ であり、垂直線で $y=g(x_n)$ へ、水平線で $y=x$ 上の点 $x_{n+1}$ へ移ることを繰り返して螺旋状に収束していく様子が分かる。「▶ 自動再生」または「次へ/戻る」で1ステップずつ確認でき、不動点 $x^*$ は収束した最後にのみ表示される。

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. アルゴリズム

不動点反復法

  1. 初期値 $x_0$ と許容誤差 $\varepsilon > 0$ を設定する。
  2. $x_{n+1} = g(x_n)$ を計算する。
  3. $|x_{n+1} - x_n| < \varepsilon$ ならば $x_{n+1}$ を解として終了。
  4. 反復回数が上限 $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}|$
00.000000
11.0000001.000000
20.5403020.459698
30.8575530.317251
40.6542900.203264
50.7934800.139190
100.7314040.012415
200.7390850.000098
300.7390850.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. 参考資料

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 となる。