ニュートン法とは

/数値計算

ニュートン法

ニュートン法とは、高次方程式の根(ゼロ点)を求めるための数値計算法です。ニュートン法は、関数 $f$ が以下の場合に有効な方法です。

    • $f$ が根の近くで十分滑らかである。
    • 根を $\alpha$ とすると $f'(\alpha)\neq0$ である。
    • 初期値が根に十分近い。

関数 $f(x)$ の根を $\alpha$ 、つまり $f(\alpha)=0$ とします。根の付近の適当な点 $a_1$ について、$a_2$ を計算します(①の導出)。

$$a_2=a_1-\frac{f(a_1)}{f'(a_1)}  -①$$

同様に $a_2$ から次の $a_3$ を計算します。

$$a_3=a_2-\frac{f(a_2)}{f'(a_2)}$$

適切な初期値を選び、根の近くで一定の条件が満たされる場合、これを繰り返すと、$a_n$ は根 $\alpha$ に収束します。特に単根の近くでは、ニュートン法は通常二次収束(導出)します。そして、$a_n$ の変化量が許容誤差範囲 $\epsilon$ 未満、または、$|f(a_n)|$ が $\delta$ 未満になれば、

$$|a_n-a_{n-1}|\lt\epsilon$$$$|f(a_n)|\lt\delta$$

$a_n$ を根の近似と考えて計算を終了します。

①の導出

テイラー展開より、

$$f(b)=f(a)+(b-a)f'(a)+\frac{1}{2}(b-a)^2f^{(2)}(a)+\cdots$$

$b$ を根、つまり $f(b)=0$ とします。$a$ を根の付近とすると、右辺の第2項に比べ第3項以降は十分に小さいと考えられるため、

$$0=f(a)+(b-a)f'(a)$$

従って、以下の $b$ を根の近似解と考えることができます。

$$b=a-\frac{f(a)}{f'(a)}$$

における接線を考え、その接線と $x$ 軸との交点を次の近似値として考えます。つまり、 における接線は、

$$y=f(a)+f'(a)(x-a)$$

$x$ 軸との交点では $y=0$ と置くと、同じ式が得られます。

$$0=f(a)+f'(a)(x-a)$$$$x=a-\frac{f(a)}{f'(a)}$$

二次収束することの導出

解 $\alpha$ のまわりで $f(a_n)$ をテイラー展開します。ここで $\xi_n$ は $\alpha$ と $a_n$ の間にある実数です。

$$f(\alpha) = f(a_n) + (\alpha – a_n)f'(a_n) + \frac{(\alpha – a_n)^2}{2} f”(a_n)$$

$f(\alpha) = 0$ および、第 $n$ 項目における誤差を $e_n = a_n – \alpha$ と置くと、

$$0 = f(a_n) – e_n f'(a_n) + \frac{e_n^2}{2} f”(a_n)  -(1)$$

①を誤差で表すと、

$$e_{n+1} = e_n – \frac{f(a_n)}{f'(a_n)}$$

ここに (1) 式の $f(a_n)$ を代入すると、

$$e_{n+1} = e_n – \frac{e_n f'(a_n) – \frac{e_n^2}{2} f”(a_n)}{f'(a_n)}= \frac{f”(a_n)}{2 f'(a_n)} e_n^2$$

$n \to \infty$ のとき $a_n \to \alpha$ の極限を取ると、

$$\lim_{n \to \infty} \frac{\vert{}e_{n+1}\vert{}}{\vert{}e_n\vert{}^2} = \left\vert{} \frac{f”(\alpha)}{2 f'(\alpha)} \right\vert{} = M \quad (\text{定数})$$

$f'(\alpha) \neq 0$ であれば $M$ は有限の値をとるため、次のステップの誤差 $e_{n+1}$ は、現在の誤差 $e_n$ の2乗に比例することが分かります。

2分法

2分法は、関数 $f(x)$ が区間 $[a_1,b_1]$ で連続で、両端で符号が異なる場合に、その区間を半分ずつに分けながら根を求める方法です。

$$f(a_1​)f(b_1​)\lt0$$

関数 $f(x)$ の根を $\alpha$ とし、根の付近の適当な範囲[$a_1$、$b_1$] について、中間点 $c_1$ を計算します。

$$c_1=\frac{a_1+b_1}{2}$$

この中間点について、

    • $f(a_1)f(c_1)\gt0$ であれば、$a_2=c_1$、$b_2=b_1$
    • $f(a_1)f(c_1)\lt0$ であれば、$a_2=a_1$、$b_2=c_1$

同様に $a_2$、$b_2$ から次の $c_2$ を計算します。

$$c_2=\frac{a_2+b_2}{2}$$

これを繰り返すと、範囲[$a_n$、$b_n$]は限りなく狭められていきます。そして、範囲[$a_n$、$b_n$]が許容誤差範囲 $\epsilon$ 未満になれば、そこで計算を止め、中間点 $c_n$ を根の近似値と考えます。

$$|a_n-b_n|\lt\epsilon \text{ならば、} c_n=\frac{a_n+b_n}{2}$$

このとき2分法の誤差評価は以下になります。

$$\Big|\frac{a_n+b_n}{2}-\alpha\Big|\le\frac{b_n-a_n}{2}$$

ニュートン法と2分法の比較
比較項目 ニュートン法 2分法
解法のアプローチ 接線を利用して根の位置を推測する 区間の中点を求め、範囲を半分に狭めていく
収束速度 非常に速い(二次収束)
※誤差がステップ毎に2乗で小さくなる
遅い(一次収束)
※誤差がステップ毎にが半分になる
初期条件 解の近くの初期値 $a_0$ を設定 異符号となる初期区間 $[a, b]$ を設定
収束の確実性(安定性) 不安定
※初期値が悪いと発散や振動を起こす
非常に高い(確実に収束)
※解を挟む区間が選べていれば必ず収束する
破綻するケース 途中で $f'(a_n) = 0$ になる、または極値付近で振動する 最初にとった区間内に根が存在しない(同符号の場合)
主な用途 高精度かつ高速な計算が必要な場合、または他の手法で十分解に近づいた後の最終仕上げ 微分が困難な関数、またはニュートン法を適用するための確実な初期範囲を探す前処理

 

数学
解析学、代数学、幾何学、統計学、論理学、基礎論、特殊関数、物理数学、情報理論、暗号理論、機械学習、金融理論、ゲーム理論、数値計算
散策路TOP
物理学、数学、力学、電磁気学、連続体力学、相対論、熱・統計力学、量子力学、解析学、代数学、幾何学、統計学、論理学、物性論、プラズマ物理、電子工学、情報・暗号、機械学習、金融・ゲーム理論、IT、FP、宗教・思想

 

タイトルとURLをコピーしました