『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

【SymPy】数学定数とオイラーの等式

SymPyの数学定数(pi,E,I)

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

# SYMPY_CONSTANTS

# In[1]

# sympyをインポート
import sympy

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

# 円周率: pi
# 15桁の円周率: 3.14159265358979

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

# In[2]

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

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

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

# 円周率を15桁で近似して、半径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 は自然対数の底を表す定数です。
数式の中に組み込むと E という記号で表示されます。
sympy.N()関数を使うと任意の桁で値を評価できます。

# In[3]

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

# 自然対数の底 : E
# 自然対数の底 : 2.718281828

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

# In[4]

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

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

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

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

# In[5]

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

# In[6]

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_EUILER

import sympy

# 円周率
pi = sympy.pi

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

# 虚数単位
i = sympy.I

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

print("z:", z)
# z:-1

数学定数の評価値

数学定数の evalf() メソッドで数学定数の近似値を得られます。

式.evalf(桁数)

evalf は evaluate as floating point (浮動小数点数で評価する) の略です。

# SYMPY_EVALUATE

# In[1]

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(式, 桁数)
# In[2]

# 円周率
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

コメント

  1. HNaito より:

    下記は誤植と思われますので、ご確認ください。
    CONSTANTS In[2] プログラムのコメントで、# 円周率を10桁で → # 円周率を15桁
    CONSTANTS In[3] プログラムの上の文で、sympy.e → sympy.E