双曲線関数
双曲線余弦 (hyperbolic cosine)、双曲線正弦 (hyperbolic sine) および 双曲線正接 (hyperbolic tangent) は、それぞれ次式によって定義されます。
\[\begin{align*}&\cosh x=\frac{e^x+e^{-x}}{2}\\[6pt]&\sinh x=\frac{e^x-e^{-x}}{2}\\[6pt]
&\tanh x=\frac{\sinh x}{\cosh x}\end{align*}\]
これらの関数を総称して 双曲線関数 (hyperbolic function) とよびます。Python では標準モジュールの math、および外部パッケージの NumPy が双曲線関数をサポートしています。
math モジュールを使って、$\sinh 0=0$ を確認してみましょう。
# PYTHON_HYPERBOLIC
import math
# In[1]
# sinh(0)
val = math.sinh(0)
print(val)
0.0
同様に、$\cosh 0$ を計算してみます。
# In[2]
# cosh(0)
val = math.cosh(0)
print(val)
1.0
配列に格納された変数に対して双曲線関数の値をまとめて計算したいときは、NumPy をインポートすると便利です。
# In[3]
import numpy as np
# 二次元配列を作成
x = np.array([[0, 1],
[2, 3]])
# 配列の各要素の双曲線余弦値を計算
val = np.cosh(x)
print(val)
[[ 1. 1.54308063] [ 3.76219569 10.067662 ]]
Numpy と Matplotlib を使って双曲線関数のグラフを描いてみます。
# In[4]
import matplotlib.pyplot as plt
# データを作成
x = np.linspace(-4, 4, 33)
y1 = np.cosh(x)
y2 = np.sinh(x)
y3 = np.tanh(x)
# データをプロット
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.grid()
ax.set_title("Hyperbolic function", size = 15)
ax.set_xlabel("x", size = 15, labelpad = 10)
ax.set_ylabel("y", size = 15, labelpad = 10)
ax.set_xlim([-4, 4])
ax.set_ylim([-4, 4])
ax.plot(x, y1, color = "red", label = "cosh(x)")
ax.plot(x, y2, color = "blue", label = "sinh(x)")
ax.plot(x, y3, color = "green", label = "tanh(x)")
ax.legend(loc = "lower right", fontsize = 12)
plt.show()
双曲線関数を含む代数計算を実行したいときは、SymPy を使います。
双曲線関数の基本公式 $\cosh x^2 - \sinh x^2 = 1$ を確認してみましょう。
# In[5]
import sympy
x = sympy.Symbol('x')
# cosh(x)**2-sinh(x)**2
expr = sympy.cosh(x)**2 - sympy.sinh(x)**2
expr = sympy.simplify(expr)
print(expr)
1
微分公式 $(\cosh x)'=\sinh x$ を確かめてみます。
# In[6]
ch = sympy.cosh(x)
# cosh(x)を微分する
dch = sympy.diff(ch, x)
print(dch)
sinh(x)
$\sinh x$ の導関数は $\cosh x$ です。
# In[7]
sh = sympy.sinh(x)
# sinh(x)を微分する
dsh = sympy.diff(sh, x)
print(dsh)
sinh(x)
念のために、$\cosh x$ の積分が $\sinh x$ となることを確かめておきましょう。
# In[8]
# cosh(x)を積分する
ich = sympy.integrate(ch, x)
print(ich)
sinh(x)
以下に Python で使用できる双曲線関数を載せておきます。
math.cosh(), math.sinh(), math.tanh()
math.cosh(x) は $\cosh x$ の値を返します。
# PYTHON_HYPERBOLIC
import math
# In[1]
# cosh(0)
val = math.cosh(0)
print(val)
1.0
math.sinh(x) は $\sinh x$ の値を返します。
# In[2]
# sinh(0)
val = math.sinh(0)
print(val)
0
math.tanh(x) は $\tanh x$ の値を返します。
# In[3]
# tanh(0)を計算
val = math.tanh(0)
print(val)
0.0
numpy.cosh(), numpy.sinh(), numpy.tanh()
numpy.cosh(x) は $\cosh x$ の値を返します。
# NUMPY_HYPERBOLIC
# In[1]
import numpy as np
# 二次元配列を作成
x = np.array([[0, 1, 2],
[3, 4, 5]])
# 配列の各要素の双曲線余弦値を計算
arr = np.cosh(x)
print(arr)
[[ 1. 1.54308063 3.76219569] [10.067662 27.30823284 74.20994852]]
numpy.sinh(x) は $\sinh x$ の値を返します。
# In[2]
# 配列の各要素の双曲線正弦値を計算
arr = np.sinh(x)
print(arr)
[[ 0. 1.17520119 3.62686041] [10.01787493 27.2899172 74.20321058]]
numpy.tanh(x) は $\tanh x$ の値を返します。
# In[3]
# 配列の各要素の双曲線正接値を計算
arr = np.tanh(x)
print(arr)
[[0. 0.76159416 0.96402758] [0.99505475 0.9993293 0.9999092 ]]
sympy.cosh(), sympy.sinh(), sympy.tanh()
sympy.cosh() は引数 (記号または数値) の双曲線余弦 (hyperbolic cosine) の値を返します。
# SYMPY_HYPERBOLIC
# In[1]
import sympy
sympy.init_printing()
x, y = sympy.symbols('x y')
expr = sympy.cosh(sympy.sqrt(x))
display(expr)
sympy.sinh() は双曲線正弦 (hyperbolic sine) の値を返します。
# In[2]
expr = sympy.sinh(sympy.sqrt(x**2 + y**2))
display(expr)
sympy.tanh() は双曲線正接 (hyperbolic tangent) を返します。
# In[3]
expr = sympy.tanh(1/(x**2+1))
display(expr)
コメントを書く