求める平方根を$x$とすると,代数的には$x^2-2=0$を解くことに等しい.
ここで$f(x)=x^2-2$とおくと,$f'(x)=2x$である.(4)式に代入して
\begin{equation}
x_{n+1} = x_{n} - \frac{x_n^2-2}{2x_n}=\frac12\left(x_n + \frac{2}{x_n}\right)
\end{equation}
このアルゴリズムをpythonで実装した例を示す.
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import numpy as np
print('=============')
print('Newton法')
print('=============')
eps = 0.5*10.0**-5.0 ## 収束判定定数 e:epsilon
X = 0 ## 平方根(正数)
n = 0 ## 収束判定定数に至るまでの計算の反復回数
print("入力値の平方根(正の値)を表示する.")
print('収束判定定数(eps)は {} .'.format(eps))
num = float(input("> "))
print('入力値は {} である.'.format(num))
X0 = (num + 1.0)/2.0
while True:
X = (X0 + num/X0)/2.0
if np.abs(X-X0) < eps * np.abs(X):
break
X0 = X
n += 1
print('平方根は {} .'.format(X))
print('収束条件に至るまでの反復計算は {} 回.'.format(n))
=============
Newton法
=============
入力値の平方根(正の値)を表示する.
収束判定定数(eps)は 5e-06 .
> 2
入力値は 2.0 である.
平方根は 1.41421356237 .
収束条件に至るまでの反復計算は 2 回.
=============
Newton法
=============
入力値の平方根(正の値)を表示する.
収束判定定数(eps)は 5e-06 .
> 10
入力値は 10.0 である.
平方根は 3.16227766017 .
収束条件に至るまでの反復計算は 4 回.
index.htmlに戻る