ベータ関数

ベータ関数

ベータ関数

 ベータ関数 は複素数 $x,\ y$ について
 
\[B(x,y)=\int_{0}^{1}t^{x-1}(1-t)^{y-1}dt\quad (\mathrm{Re}x,\mathrm{Re}y\gt 0)\tag{1}\]
で定義される関数です。scipy.special.beta(a, b) を使うとベータ関数の値を計算できます。定義式 (1) から明らかなように、ベータ関数は引数 $x$ と $y$ を交換しても値を変えません。すなわち
 
\[B(x,y)=B(y,x)\tag{2}\]
が成り立ちます。

# BETA-1
# ベータ関数の変数交換

from scipy.special import beta, gamma

# B(1,2),B(2,1)
a = beta(1, 2)
b = beta(2, 1)

print("B(1, 2) = {}".format(a))
print("B(2, 1) = {}".format(b))
B(1, 2) = 0.5
B(2, 1) = 0.5

 

ベータ関数とガンマ関数

 ベータ関数は ガンマ関数
 
\[B(x,y)=\frac{\Gamma (x)\Gamma (y)}{\Gamma (x+y)}\tag{3}\]
という関係で結びついています。

# BETA-2
# ベータ関数とガンマ関数

# B(3, 5)
b = beta(3, 5)

# Γ(3)Γ(5)/Γ(3+5)
g = gamma(3) * gamma(5) / gamma(8)

print("B(3, 5) = {:.5f}".format(b))
print("Γ(3)Γ(5)/Γ(3+5) = {:.5f}".format(g))
B(3, 5) = 0.00952
Γ(3)Γ(5)/Γ(3+5) = 0.00952

 

東京大学のデータサイエンティスト育成講座 ~Pythonで手を動かして学ぶデ―タ分析~

新品価格
¥3,218から
(2019/8/6 11:41時点)

ベータ関数のグラフ

 $y=1,\ 2,\ 3$ に固定して、$x$ を変化させたときのベータ関数をプロットしてみます。

# BETA-3
# ベータ関数のグラフ

import numpy as np
import matplotlib.pyplot as plt

# x座標データ
x = np.linspace(0, 4, 65)

# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("Beta Functions", size = 15)
ax.grid()
ax.set_xlim(0, 4)
ax.set_ylim(0, 4)
ax.set_xlabel("x", size = 14, labelpad = 10)
ax.set_ylabel("B(x, y)", size = 14, labelpad = 10)

# 色のリスト
c = ["red", "blue", "green"]

# B(x,1),B(x,2),B(x,3)のグラフを描画
for i in range(1, 4):
    ax.plot(x, beta(x, i), color = c[i - 1],
            label = "y = {}".format(i))

# 凡例を表示
ax.legend()

 Python ベータ関数 (beta function)

ベータ関数の相反公式

 ベータ関数 $B(x,1-x)$ は正弦関数 $\sin x$ と次のような形で結びついています。
 
\[B(x,1-x)=\frac{\pi}{\sin \pi x}\]
 これをベータ関数の 相反公式 とよびます。
 $B(x,1-x)$ は整数点 $x=0,\ 1,\ 2,\ ...$ を漸近線にもつ周期関数です。

# BETA-4

# B(x,1-x)=π/sin(πx)

# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("B(x, 1 - x)", size = 15)
ax.grid()
ax.set_xlim(0, 4)
ax.set_ylim(-15, 15)
ax.set_xlabel("x", size = 14, labelpad = 10)
ax.set_ylabel("B(x, 1-x)", size = 14, labelpad = 8)

# B(x,1-x)のグラフを描画
for i in range(4):
    x = np.linspace(i, i + 1, 65)
    ax.plot(x, beta(x, 1 - x), color = "darkblue")

 ベータ関数 (beta function) と正弦関数 (sine)