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

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

はじめに

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

ニュートン法とは?

ニュートン法(Newton-Raphson法)は、非線形方程式の解を数値的に求めるための反復法である。平方根の計算では、次のような反復式を使用する。xn+1=xn+axn2ここでxnn回目の反復での推定値、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回目の反復
    x=2+222=1.5
  3. 2回目の反復
    x=1.5+21.521.4166666667
  4. 3回目の反復
    x=1.4167+21.416721.4142
  5. 4回目の反復
    x=1.4167+21.416721.4142

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

結論

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

コメント

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