ニュートン法は、関数のゼロを求める代表的な反復法です。アルゴリズム名は、アイザック・ニュートン卿とジョセフ・ラプソンにちなんで「ニュートン・ラフソン法(Newton–Raphson 法)」とも呼ばれます。

定義と基本原理

ニュートン法は、関数の微分を利用して近似解を漸進的に改善する方法です。初期推定値 x0 を与え、次の反復式を繰り返します。

反復式: xn+1 = xn − f(xn)/f'(xn)

x n + 1 = x n - f ( x n ) f ′ ( x n ) {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}}}}}}}}}}}}}。 {\displaystyle x_{n+1}=x_{n}-{\frac {f(x_{n})}{f'(x_{n})}}}

ここで xn は現在の推定値、xn+1 は次の推定値です。直感的には、点 (xn, f(xn)) における関数の接線をとり、その接線が x 軸と交わる点の x 座標を次の推定値とします。接線の方程式を使うことで上の反復式が導かれます。

アルゴリズムの手順(概略)

  • 1. 初期値 x0 を選ぶ。
  • 2. n = 0, 1, 2, ... として、f'(xn) ≠ 0 を確認する。
  • 3. xn+1 = xn − f(xn)/f'(xn) を計算する。
  • 4. 収束判定(例:|xn+1 − xn| < ε または |f(xn+1)| < ε)を満たせば終了、満たさなければ n ← n+1 に戻る。

収束性と注意点

  • 局所二次収束: 解 α に対し f(α) = 0 かつ f'(α) ≠ 0 であれば、初期値を十分に近くとることで反復は二次収束(誤差がほぼ二乗で減る)します。これは非常に高速です。
  • 初期値依存性: 初期値が遠いと発散したり、別の根に収束したり、周期解に陥ったりすることがあります。
  • 導関数が零の場合: ある xn で f'(xn) = 0 になると式が使えず失敗します。多重根(重根)の場合も通常のニュートン法は収束が遅くなる(線形収束)ことがあります。
  • 関数の評価コスト: f と f' の評価が重い問題では各反復のコストが高くなります。その場合は導関数不要の割線法(Secant 法)や準ニュートン法が検討されます。

停止基準の例

  • |xn+1 − xn| < tol のとき
  • |f(xn+1)| < tol のとき
  • 反復回数が最大回数を超えたとき(タイムアウト)

実装上の工夫・変法

  • 緩和(ダンパー)付きニュートン法: xn+1 = xn − λ (f(xn)/f'(xn))(0 < λ ≤ 1)で、λ を行列探索やバックトラッキングで選ぶことで発散を抑えられます。
  • 多重根対策: 根の重複度 m が分かっていれば、修正式 xn+1 = xn − m f(xn)/f'(xn) を使うと良いことがあります。
  • 導関数が得られない場合: 割線法(Secant)や数値差分で導関数を近似する方法を用います。
  • 多変数への拡張: 方程式系 F(x) = 0(x, F ベクトル値)の場合はヤコビ行列 J を用いることで多変数ニュートン法となり、反復は x_{n+1} = x_n − J(x_n)^{-1} F(x_n) または線形系の解を用いて行います。

簡単な例:平方根の計算

平方根を求める問題 f(x) = x^2 − A = 0 にニュートン法を適用すると、

x_{n+1} = x_n − (x_n^2 − A)/(2 x_n) = (x_n + A / x_n) / 2

となり、これは古典的な「バビロニア法(牛の乳出し法)」に一致します。初期値を A/2 や 1 に取れば高速に収束します。

まとめ

  • ニュートン法は局所的に非常に速い(通常二次)反復法で、多くの数値計算で標準的に用いられます。
  • ただし、初期値選び、導関数ゼロ、多重根、評価コストといった問題点があり、これらに対する工夫(ダンピング、修正式、代替法)を組み合わせて使うことが重要です。