[Python]ニュートン法を用いて平方根を高精度に求める方法

gray newton s cradle in close up photogaphy math
Photo by Pixabay on Pexels.com

はじめに

平方根の計算は、数学や科学の分野で頻繁に使われる。特に高精度な計算が必要な場合、Pythonのdecimalモジュールを利用することで精度を細かく制御できる。今回は、ニュートン法を用いて平方根を高精度に求める方法を解説する。

ニュートン法とは?

ニュートン法(Newton-Raphson法)は、非線形方程式の解を数値的に求めるための反復法である。平方根の計算では、次のような反復式を使用する。$$x_{n+1} = \frac{x_n + \frac{a}{x_n}}{2}$$ここで\(x_n\)は\(n\)回目の反復での推定値、\(a\)は平方根を求めたい値である。

実装の詳細

Pythonのdecimalモジュールを使って平方根を高精度に求める関数を紹介する。

from decimal import Decimal, getcontext

def sqrt(n, k):
    getcontext().prec = k + 1
    x = Decimal(n)
    y = Decimal(0)
    while x != y:
        y = x
        x = (x + n / x) / 2
    return round(x, k)

この関数では、以下の手順で計算を行う。

1. decimalモジュールを用いて計算の精度を設定する。

2. 初期推定値\(x\)を設定し、反復計算を行う。

3. 反復計算が収束したら、結果を指定の精度で丸めて返却する。

具体例:\(2\)の平方根を求める

実際に\(2\)の平方根を求めてみる。今回は小数点以下10桁までの精度で計算する。

n = 2
k = 10
result = sqrt(n, k)
print(f"The square root of {n} to {k} decimal places is {result}")

計算過程

  1. 初期設定
    ・初期推定値\(x = 2\)
    ・\(y = 0\)
  2. 1回目の反復
    ・\(\displaystyle x = \frac{2+\frac{2}{2}}{2} = 1.5\)
  3. 2回目の反復
    ・\(\displaystyle x = \frac{1.5 + \frac{2}{1.5}}{2} \approx 1.4166666667 \)
  4. 3回目の反復
    ・\(\displaystyle x = \frac{1.4167 + \frac{2}{1.4167}}{2} \approx 1.4142…\)
  5. 4回目の反復
    ・\(\displaystyle x = \frac{1.4167 + \frac{2}{1.4167}}{2} \approx 1.4142…\)

このようにして、2の平方根が約 (\( 1.4142135624\) ) であることがわかる。

結論

ニュートン法を使えば、平方根を高精度で求めることができた。特にPythonのdecimalモジュールを用いることで、計算精度を自由に制御できるため、科学技術計算において非常に有用である。

コメント

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