平方根の演算

平方根の演算

平方根(ルート)の演算

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

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

 $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 の正の平方根 $\sqrt{x}$ を求めることができます。$2$ の平方根 $\sqrt{2}$ を計算させてみましょう。

# PYTHON_ROOT_01

# In[1]

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

print(val)
1.4142135623730951

 負数の平方根は虚数となります。

# In[2]

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

print(val)
(8.659560562354934e-17+1.4142135623730951j)

 $\sqrt{-2}$ の平方根は $0+\sqrt{2}i$ ですが、僅かに誤差が生じて実部に非常に小さな値が入っています。虚数の平方根も計算できます。

# In[3]

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

print(val)
(0.7071067811865476+0.7071067811865475j)

 $i$ をオイラー形式で表すと、$e^{i\pi/2}$ なので、平方根($1/2$ 乗)は $e^{i\pi/4}$ となります。
 

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

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

# PYTHON_ROOT_02

# In[1]

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

print(val)
2.8284271247461903

 

# In[2]

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

print(val)
(8.659560562354934e-17+1.4142135623730951j)

 

# In[3]

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

print(val)
(0.7071067811865476+0.7071067811865475j)

 

math.sqrt()

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

# PYTHON_ROOT_03

# In[1]

# mathをインポート
import math

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

print(val)
1.4142135623730951

 

# In[2]

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

print(val)
4.0

 

# In[3]

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

print(val)
1.7724538509055159

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

numpy.sqrt(x)

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

# NUMPY_SQRT

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 の平方根を返します。x には数値の他に代数記号を渡すこともできます。文字式 $a+b$ の平方根を求めてみましょう。

# SYMPY_SQRT

import sympy

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

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

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

 

sympy.root()

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

# SYMPY_ROOT

# sympyをインポート
import sympy

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

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

print(func)
sqrt(x)