以下の内容はhttps://pydocument.hatenablog.com/entry/2024/09/01/082208より取得しました。


Pythonで平方根を計算する

Python平方根を計算する方法をまとめました。モジュール、ライブラリを用いた計算方法、平方根を求める代表的なアルゴリズムニュートン法」「二分法」をPythonで実装する計算方法を解説していきます。

mathモジュールのsqrt関数を使った計算

Python平方根を計算する最も一般的な方法は、mathモジュールのsqrt関数を使うことです。この関数は、非負の実数を引数として受け取り、その平方根を返します。

import math

# 有理数の平方根
number1 = 25
result1 = math.sqrt(number1)
print(result1)  # 出力: 5.0

# 無理数の平方根
number2 = 2
result2 = math.sqrt(number2)
print(result2)  # 出力: 1.4142135623730951  (近似値)

NumPyのsqrt関数を使った計算

NumPyは数値計算に特化したライブラリです。以下の様に平方根を計算することができます。

import numpy as np

number = 25

# 平方根を計算
result = np.sqrt(number)

print(result)  # 出力: 5.0

なお、NumPyのsqrt関数では配列などの複数の数値の平方根を一度に計算することができます。

import numpy as np

numbers = [2, 3, 5]
results = np.sqrt(numbers)
print(results)  # 出力: [1.41421356 1.73205081 2.23606798]

配列を扱うことが多い場合は「NumPy」、ライブラリの導入に制限がある場合やシンプルな計算で済む場合は、「math」モジュールを使うのが良いかと思います。

べき乗の計算を使った計算

シンプルな計算方法として、平方根はある数を1/2乗することと等価ですので、下記のように計算することも可能です。

number = 2
result = number ** 0.5
print(result)  # 出力: 1.4142135623730951  (近似値)

自分で実装する方法

モジュールやライブラリを利用せず、アルゴリズを実装して平方根を求めることが可能です。平方根の近似値を求める方法として代表的な2つの方法、ニュートン法二分法について解説します。

ニュートン法を用いた実装

ニュートン法は、ある関数の根(つまり、関数の値が0となるxの値)を求めるための数値計算法です。平方根の計算にも応用できます。

ニュートン法の考え方

  1. 平方根を求めたい数をaとする。
  2. a平方根の初期値x0を適当に決める。
  3. 次の式を繰り返し計算することで、より正確な近似値x1, x2, ... を求める。
   x1 = (x0 + a/x0) / 2
   x2 = (x1 + a/x1) / 2
   ...

ニュートン法Pythonコード

def sqrt_newton(a, eps=1e-10):
  """
  ニュートン法を用いて平方根を求める関数

  Args:
    a: 平方根を求める数
    eps: 許容誤差

  Returns:
    aの平方根の近似値
  """

  x = a / 2
  while abs(x**2 - a) > eps:
    x = (x + a/x) / 2
  return x

# 例
result = sqrt_newton(16)
print(result)  # 出力: 4.0

予備校のノリで学ぶ大学数学 ツマるポイントを徹底解説 [ ヨビノリたくみ ]

二分法を用いた実装

二分法は、ある関数の根を求める別の数値計算法です。ニュートン法よりも安定しているという特徴があります。

考え方

  1. 平方根を求めたい数をaとする。
  2. a平方根の範囲を[left, right]とする。
  3. 中点midを計算し、mid**2aを比較する。
    • mid**2aより大きければ、範囲を[left, mid]に狭める。
    • mid**2aより小さければ、範囲を[mid, right]に狭める。
  4. 十分に範囲が狭まれば、mida平方根の近似値となる。

Pythonコード

def sqrt_bisection(a, eps=1e-10):
  """
  二分法を用いて平方根を求める関数

  Args:
    a: 平方根を求める数
    eps: 許容誤差

  Returns:
    aの平方根の近似値
  """

  left, right = 0, a
  while right - left > eps:
    mid = (left + right) / 2
    if mid**2 > a:
      right = mid
    else:
      left = mid
  return mid

# 例
result = sqrt_bisection(16)
print(result)  # 出力: 4.0

mathモジュールやNumPyのライブラリを用いる方法が一般的ですが、パフォーマンスや計算リソースの要件に応じて独自の実装が必要な場合は参考にしてください。




以上の内容はhttps://pydocument.hatenablog.com/entry/2024/09/01/082208より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14