[SymPy] 数学定数とオイラーの等式

[SymPy] 数学定数とオイラーの等式

SymPy の数学定数

 SymPy では数学定数を Symbol として扱うことができます。

 円周率 sympy.pi
 自然対数の底 sympy.E
 虚数単位 sympy.I

 これらの Symbol を式に組み込むと、pi, E, I という記号で表示されます。数学定数同士で演算が行われると数値(int や float ではなく、sympy.core.numbers.Integer のようなクラスのオブジェクト)に変換されることがあります。たとえば、虚数単位 sympy.I の 2 乗を計算すると -1 (sympy.core.numbers.NegativeOneクラスのオブジェクト) に変換されます。

円周率 (sympy.pi)

 sympy.pi は円周率を表す定数です。
 式の中に組み込むと pi という記号で表示されます。
 sympy.N()関数を使うと任意の桁で値を評価できます。

# 円周率

# sympyをインポート
import sympy

print("円周率 :", sympy.pi)
print("15桁の円周率 :", sympy.N(sympy.pi, 15))
円周率 : pi
15桁の円周率 : 3.14159265358979

 sympy.pi を使うと円の面積などを記号を含んだ式として表すことができます。

# 円の面積

# sympyをインポート
import sympy

# 半径rをSymbolとして定義
sympy.var('r')

# 半径rの円の面積
c_area = sympy.pi * r ** 2

# c_areaにr=5を代入して、半径5の円の面積を計算
s1 = c_area.subs(r, 5)

# 円周率を10桁で近似して、半径5の円の面積を計算
s2 = sympy.N(s1)

print("半径rの円の面積 :", c_area)
print("半径5の円の面積 :", s1)
print("半径5の円の面積 :", s2)
半径rの円の面積 : pi*r**2
半径5の円の面積 : 25*pi
半径5の円の面積 : 78.5398163397448

 

自然対数の底 (sympy.E)

 sympy.pi は自然対数の底を表す定数です。
 式の中に組み込むと E という記号で表示されます。
 sympy.N()関数を使うと任意の桁で値を評価できます。

# sympyをインポート
import sympy

print("自然対数の底 :", sympy.E)
print("自然対数の底 :", sympy.N(sympy.E, 10))
自然対数の底 : E
自然対数の底 : 2.718281828

 sympy.E のベキ乗は exp() で表記されます。

# 自然対数の底

# sympyをインポート
import sympy

e = sympy.E
sympy.var('x')

y = e**(2*x)+1

print("y =", y)
y = exp(2*x) + 1

 sympy.E を対数関数 sympy.log() に渡すと 1 が返ります。

# sympyをインポート
import sympy

e = sympy.E

# log(e)を計算
print("log(e) =", sympy.log(e))

# log(e**2)を計算
print("log(e**2) =", sympy.log(e**2))
log(e) = 1
log(e**2) = 2

 

虚数単位 (sympy.I)

 sympy.I は虚数単位です。
 式の中に組み込むと I という記号で表示されます。
 sympy.I を 2 乗すると -1 となります。

# 虚数単位

# sympyをインポート
import sympy

print("虚数単位 :", sympy.I)
print("I**2 =", sympy.I ** 2)
print("I**3 =", sympy.I ** 3)
print("I**4 =", sympy.I ** 4)
虚数単位 : I
I**2 = -1
I**3 = -I
I**4 = 1

 

オイラーの等式

 sympy.E ** (sympy.I * sympy.pi) は -1 に変換されます。
 すなわち世界で最も美しいといわれる オイラーの等式 $e^{i\pi}=-1$ です。

# オイラーの等式

# sympyをインポート
import sympy

# 円周率
pi = sympy.pi

# 自然対数の底
e = sympy.E

# 虚数単位
i = sympy.I

# オイラーの等式
z = e**(i*pi)

print("z =", z)
z = -1

 

浮動小数点数型の近似値

evalf()メソッド

 式に evalf()メソッドを用いると、浮動小数点数型の近似値 (sympy.core.numbers.Floatクラスのオブジェクト) を得ることができます。evalf は evaluate as floating point (浮動小数点数で評価する) の略です。

 式.evalf(桁数)
# sympyをインポート
import sympy

# 円周率
pi = sympy.pi

# ネイピア数
e = sympy.E

# √2
sqr2 = sympy.sqrt(2)

# 円周率の15桁の近似値
print("pi =", pi.evalf())

# ネイピア数の18桁の近似値
print("e =", e.evalf(18))

# √2の20桁の近似値
print("√2 =", sqr2.evalf(20))
pi = 3.14159265358979
e = 2.71828182845904524
√2 = 1.4142135623730950488

 

sympy.N()関数

 sympy.N()関数を使って値を評価することもできます。

 sympy.N(式, 桁数)
# sympyをインポート
import sympy

# 円周率
pi = sympy.pi

# ネイピア数
e = sympy.E

# √2
sqr2 = sympy.sqrt(2)

# 円周率の15桁の近似値
print("pi =", sympy.N(pi))

# ネイピア数の18桁の近似値
print("e =", sympy.N(e, 18))

# √2の20桁の近似値
print("√2 =", sympy.N(sqr2, 20))
pi = 3.14159265358979
e = 2.71828182845904524
√2 = 1.4142135623730950488