平方根の演算

平方根の演算

平方根の演算

 $2$ 乗して $x$ になる数を $x$ の 平方根 (square root) とよびます。たとえば、$-4$ と $4$ はどちらも $2$ 乗すると $16$ になるので、$16$ の平方根です。

 $x$ の平方根のうち正数を $\sqrt{x}$ で表し、ルート $x$ と読みます。
 記号 $\sqrt{}$ は根号といいます。
 $\sqrt{16}=4$ であり、$16$ の平方根は $\pm\sqrt{16}$ です。

 $5$ の平方根は自然数でも分数でも表すことができず、
 
\[\sqrt{5}=2.2360679775 \, ...\]
のように無限に続く循環しない小数となります。このような数を「無理数」とよびます。$\sqrt{3},\ \sqrt{7},\ \sqrt{11}$ なども無理数です。

 $2$ 乗して $-1$ になる数は実数範囲に存在しません。
 そこで虚数単位 $i$ という新しい枠組みの数字を用意して、$i^2=-1$ と定義します。
 このとき、$-i$ も $-1$ の平方根となりますが、根号をとる場合は正符号の虚数を採用します (正数ではありません)。すなわち $\sqrt{-1}=i$ となります。

 実数と虚数を組合わせた数 $z=a+bi$ を複素数といいます。
 複素数 $z$ についても、$2$ 乗して $z$ になるような数を $z$ の平方根として定義します。

算術演算子で平方根を計算する

 算術演算子を使って「x**0.5」と記述すれば、x の正の平方根(√x)を求めることができます。

# ROOT_01

# √2の計算
a = 2**0.5

# √-2の計算
b = (-2)**0.5

# √i = exp(pi*i/4)
c = (1j)**0.5

print("a =", a)
print("b =", b)
print("c =", c)
a = 1.4142135623730951
b = (8.659560562354934e-17+1.4142135623730951j)
c = (0.7071067811865476+0.7071067811865475j)

 上のサンプルコードにあるように、算術演算子を使うと 負数や虚数の平方根 を求めることができます。$\sqrt{-2}$ の平方根は $0+\sqrt{2}i$ ですが、僅かに誤差が生じて実部に非常に小さな値が入っています。$i$ をオイラー形式で表すと、$e^{i\pi/2}$ なので、平方根(すなわち $1/2$ 乗)は $e^{i\pi/4}$ となります。
 

組み込み関数で平方根を計算する

 組み込み関数 pow(x, y [,z]) でオプション引数 z を省略すると、x の y 乗を計算します。すなわち、pow(x, 0.5) で x について正の 平方根 を得ることができます。引数 x には負数や複素数を渡すこともできます。

# ROOT_02

# √8の計算
a = pow(8, 0.5)

# √-2の計算
b = pow(-2, 0.5)

# √i = exp(pi*i/4)
c = pow(1j, 0.5)

print("a =", a)
print("b =", b)
print("c =", c)
a = 2.8284271247461903
b = (8.659560562354934e-17+1.4142135623730951j)
c = (0.7071067811865476+0.7071067811865475j)

 

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

新品価格
¥3,996から
(2019/8/6 11:42時点)

math.sqrt()

 mathモジュールをインポートすれば、math.sqrt(x) で √x を計算できます。算術演算子や numpy.sqrt(x) とは異なり、x に負数や複素数 (complex型オブジェクト) を渡すことはできません。

# ROOT_03

# mathをインポート
import math

# √2の計算
a = math.sqrt(2)

# √16の計算
b = math.sqrt(16)

# piの平方根
c = math.sqrt(math.pi)

print("a =", a)
print("b =", b)
print("c =", c)
a = 1.4142135623730951
b = 4.0
c = 1.7724538509055159<

 math.sqrt(x) の演算機能が制限されている理由については、べき乗の記事を参照してください。
 

numpy.sqrt(x)

 Numpyをインポートすれば、numpy.sqrt(x) を使えるようになります。引数 x に負数や複素数 (complex型オブジェクト)、配列 (ndarray型オブジェクト) を指定することも可能です。

# ROOT_04

import numpy as np

# 数値の入った配列を定義
num_array = np.array([3, -3, 2 + 3j])

# 配列のすべての要素の平方根(ルート)を計算
sqrt_array = np.sqrt(num_array)

print(sqrt_array)
[1.73205081+0.j 0.+1.73205081j 1.67414923+0.89597748j]

 

sympy.sqrt(x)

 sympy.sqrt(x) は x の平方根を代数記号で返します。

# ROOT_06

import sympy

# 記号a,bを定義
sympy.var('a b')

# 数式をLaTeX表示
sympy.init_printing()

# a+bの平方根
sympy.sqrt(x**5)
\[\sqrt{a+b}\]

 

sympy.root()

 sympy.root(x, n) は x の n 乗根を返します。
 sympy.root() の n に 2 を渡せば平方根を計算できます。

# ROOT_07

# sympyをインポート
import sympy

# 記号xを定義
sympy.var('x')

# x の平方根
func = sympy.root(x, 2)

print(func)
sqrt(x)