2024.3.4 Newton-Raphson法【torch】
Newton-Raphson法は方程式の解を求めるための反復法である。
$ f(x) = 0を満足するような$ xを、次の漸化式を用いて求める。
$ x_{n+1} = x_{n} - \frac{f(x_n)}{f'(x_n)}
計算にあたっては対象となる方程式$ fとその導関数$ f'が必要となるが、Pytorchを用いると導関数を自動微分によって数値的に求めることができる。このことを確認しよう。
Wikipediaの数値例を参考にする。まずは簡単な例を示す。
code:newton1.py
# 対象となる関数
def func_x(x):
return x**2 - 2
# 導関数
def func_xd(x):
return 2*x
###
x_initial = 2
###
x = x_initial
for i in range(20):
print(str(i + 1) + ')', x)
x = x - func_x(x) / func_xd(x)
PyTorchを用いた版
code:newton1_torch.py
import torch as pt
def func_x(x):
return x**2 - 2
###
x_initial = 2
###
x = x_initial
for i in range(10):
print(x)
x = pt.tensor(x, dtype=pt.float, requires_grad=True)
func = func_x(x)
func.backward()
x = x - func / x.grad
x = x.clone().detach().numpy()
正しく求まっているようだ。