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

双曲線関数

双曲線関数

双曲線余弦 (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

# In[1]

import math

# 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()

numpy hyperbolic function graph
双曲線関数を含む代数計算を実行したいときは、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]

# cosh(x)を微分する
cosh_derivative = sympy.diff(sympy.cosh(x), x)

print(cosh_derivative)
# sinh(x)

$\sinh x$ の導関数は $\cosh x$ です。

# In[7]

# sinh(x)を微分する
sinh_derivative = sympy.diff(sympy.sinh(x), x)

print(sinh_derivative)
# cosh(x)

念のために、$\cosh x$ の積分が $\sinh x$ となることを確かめておきましょう。

# In[8]

# cosh(x)を積分する
cosh_integ = sympy.integrate(ch, x)

print(cosh_integ)
# sinh(x)

以下に Python で使用できる双曲線関数を載せておきます。

math.cosh()

math.cosh(x) は双曲線余弦 $\cosh x$ の値を返します。

# PYTHON_MATH_COSH

import math

# cosh(0)
val = math.cosh(0)

print(val)
# 1.0

math.sinh()

math.sinh(x) は双曲線正弦 $\sinh x$ の値を返します。

# PYTHON_MATH_SINH

# import math

# sinh(0)
val = math.sinh(0)

print(val)
# 0

math.tanh(x)

math.tanh(x) は双曲線正接 $\tanh x$ の値を返します。

# PYTHON_MATH_TANH

# import math

# tanh(0)を計算
val = math.tanh(0)

print(val)
# 0.0

numpy.cosh()

numpy.cosh(x) は $\cosh x$ の値を返します。

# NUMPY_COSH

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()

numpy.sinh(x) は双曲線正弦 $\sinh x$ の値を返します。

# NUMPY_SINH

import numpy as np

x = np.array([[0, 1, 2],
              [3, 4, 5]])

# 配列の各要素の双曲線正弦値を計算
arr = np.sinh(x)

print(arr)
# [[ 0.          1.17520119  3.62686041]
#  [10.01787493 27.2899172  74.20321058]]

numpy.tanh()

numpy.tanh(x) は双曲線正接 $\tanh x$ の値を返します。

# NUMPY_TANH

import numpy as np

x = np.array([[0, 1, 2],
              [3, 4, 5]])

# 配列の各要素の双曲線正接値を計算
arr = np.tanh(x)

print(arr)
# [[0.         0.76159416 0.96402758]
#  [0.99505475 0.9993293  0.9999092 ]]

sympy.cosh()

sympy.cosh() は引数 (記号または数値) の双曲線余弦 (hyperbolic cosine) の値を返します。

# SYMPY_COSH

import sympy
sympy.init_printing()
x, y = sympy.symbols('x y')

expr = sympy.cosh(sympy.sqrt(x))

display(expr)
\[\cosh{\left(\sqrt{x} \right)}\]

sympy.sinh()

sympy.sinh() は双曲線正弦 (hyperbolic sine) の値を返します。

# SYMPY_SINH

import sympy
sympy.init_printing()
x, y = sympy.symbols('x y')

expr = sympy.sinh(sympy.sqrt(x**2 + y**2))

display(expr)
\[\sinh{\left(\sqrt{x^{2} + y^{2}} \right)}\]

sympy.tanh()

sympy.tanh() は双曲線正接 (hyperbolic tangent) を返します。

# SYMPY_TANH

import sympy
sympy.init_printing()
x = sympy.symbols('x')

expr = sympy.tanh(1/(x**2+1))

display(expr)
\[\tanh{\left(\frac{1}{x^{2} + 1} \right)}\]

 

コメント

  1. あとりえこばと より:

    【AI連載小説】科学とコードの交差点(29)「双曲線関数」
     
    夕食の席で、瞳と開誠は食事をしながら会話を楽しんでいました。突然、瞳が開誠に向かって興味深そうな表情で質問をふりかけました。
     
    瞳: あ、そうだ。開誠、最近双曲線関数について学んでいるんだけど、君もちょっと興味を持ってみない?
     
    開誠: 双曲線関数? それって何か特殊な関数なの?
     
    瞳: そうだよ。双曲線関数は三角関数と同様に重要で、数学や物理学、工学などで幅広く使われるんだ。具体的には、双曲線関数にはsinh(ハイパボリックサイン)、cosh(ハイパボリックコサイン)、tanh(ハイパボリックタンジェント)などがあるよ。
     
    開誠: ハイパボリックサインやコサイン、初めて聞くな。どんな特性があるんだ?
     
    瞳: 双曲線関数は指数関数と似ている性質を持っていて、特に指数関数が複雑になる場面で使われることが多いんだ。具体的な式やグラフを見てみたい?

    開誠: もちろん、見てみたいよ。そういえば姉さん、天体物理学の研究で双曲線関数って使うことってあるの?
     
    瞳: そうだね、使うことはあるよ。例えば、重力場の中を物体が運動するとき、その軌道を双曲線でモデリングすることがあります。また、ブラックホールの周りの時空も双曲線関数を使って表現されたりするんだ。
     
    開誠: なるほど、軌道のモデリングや時空の表現にも双曲線関数が関わるんだね。それにしても、天体物理学って本当に奥深い分野だな。
     
    瞳: そうだね。数学が物理学と深く結びついているからこそ、双曲線関数などの数学的な概念が活かされているんだ。興味があれば、いつでも一緒に学んでみない?
     
    開誠: そうだね、姉さんと一緒に学ぶのも楽しそうだ。今度、天体物理学の本でも読んでみようかな。