概要
ニュートン法は、の解
を求める数値計算法で、最急降下法に比べて収束が早い特徴があります。ニュートン・ラフソン法とも呼びます。
アルゴリズム
関数の点
における接線
は以下の式で与えられます。
式(1)の接線と、軸との交点は
です。接線は関数の1次近似ですから、式(3)で表される交点は
を1次近似した場合における
の解であると考えられます。その近似解は
よりも真の解に近づいていると想定されます。したがって、得られた近似解において、さらに式(3)によってより確からしい近似解を得ることができます。このようにして繰り返し更新することで真の解に近づいていくことができます。図で表すと以下のようなイメージです。

青色の線が関数、オレンジが接線
です。適当な初期値
における接線と
軸との交点
が式(3)によって得られ、これを繰り返すことで解
に近づいていきます。
ここで、となる点が求めたい場合は、
とすれば良いです。
の解
を求めるニュートン法のアルゴリズム
の初期値を設定する。
によって
を更新する
- 停止条件(更新量が一定値以下になるなど)が満たされるまで手順2を繰り返す
実験
試しにの解
をニュートン法で求めてみまた。数回の反復で
1.4142135623...
が得られました。仮に初期値を25としてみたとき、解への近づき方は以下のグラフのようになり、収束の早さが見て取れます。
テストしたコード。今回は反復回数を固定にしていますが、実際は適当な停止条件を設けて計算するようです。また、初期値が解から遠いと、収束しない場合もあるとのこと。は単純なのでどんな初期値からでも解が求められそうですが。
# ニュートン法 import numpy as np def f(x): return x**2 - 2 def newton(xn): return f(xn)/(2*xn) # 初期値 x = 3.0 # ニュートン法による更新 for i in range(10): x -= newton(x) print(x)