sinc関数

sinc関数

sinc関数

 正弦関数 $\sin x$ を $x$ で割った関数
 
\[\mathrm{sinc}(x)=\frac{\sin x}{x}\tag{1}\]
sinc関数 とよびます。工学では全区間での積分が $1$ になるように正規化された
 
\[\mathrm{sinc}(x)=\frac{\sin(\pi x)}{\pi x}\tag{2}\]
を使うのが一般的です。sinc関数は $x=0$ から正負の方向に減衰する振動関数です。

sinc関数の級数展開

 正規化された sinc関数は次の式で級数展開できます。
 
\[\mathrm{sinc}(x)=\sum_{n=0}^{\infty}\frac{(-1)^n\pi^{2\pi}}{(2n+1)!}x^{2n}\]
 後述する SymPy の sinc() は、正規化されていない sinc関数の任意の項までの級数展開を取得するメソッドを備えています。
 

numpy.sinc()

 numpy.sinc(x) は正規化された sinc関数 の値を返します。
 以下のコードを実行すると、sinc関数の概形が表示されます。

# PYTHON_SINC_01

import numpy as np
import matplotlib.pyplot as plt

# 区間[-6,6]を512分割
x = np.linspace(-6, 6, 513)

# sinc(x)
sc = np.sinc(x)

# FigureとAxes
fig = plt.figure(figsize=(6.5, 5))
ax = fig.add_subplot(111)
ax.grid()
ax.set_xlabel("x", fontsize=15)
ax.set_ylabel("sinc(x)", fontsize=15)
ax.set_xlim(-6, 6)
ax.set_ylim(-0.4, 1.2)

# グラフをプロット
ax.plot(x, sc, color = "darkblue", label="sinc(x)")

# 凡例を表示
ax.legend(loc="upper left")

# 画像を保存
plt.savefig("sinc.png", bbox_inches = "tight")

 Python sinc関数

sympy.functions.elementary.trigonometric.sinc()

 SymPyパッケージから正規化されていない sinc関数を呼び出すことができます。

# PYTHON_SINC_02-1

from sympy import *

# 記号を定義
var("x")

# sinc(x)のグラフをプロット
plot(sinc(x), (x, -12, 12), ylabel = "sinc(x)")

 SymPyのsinc関数

 $\mathrm{sinc}(x)$ を $9$ 次の項まで級数展開してみます。

# PYTHON_SINC_02-2

# sinc関数を級数展開
sinc(x).series()
1 - x**2/6 + x**4/120 - x**6/5040 + x**8/362880 + O(x**10)

 sinc関数の不定積分が正弦積分 $\mathrm{Si}(x)$ になることを確認してみます。

# PYTHON_SINC_02-3

# sinc関数の不定積分
integrate(sinc(x))
Si(x)

 

三角積分

正弦積分と余弦積分

 sinc関数の不定積分
 
\[\mathrm{Si}(x)=\int_{0}^{x}\frac{\sin t}{t}dt\tag{3}\]
を正弦積分とよび、
 
\[\mathrm{Ci}(x)=-\int_{0}^{x+\infty}\frac{\cos t}{t}dt
=\gamma+\log x+\int_{0}^{x}\frac{\cos t-1}{t}dt\tag{4}\]
によって定義される関数を余弦積分といいます。正弦積分と余弦積分をまとめて三角積分とよびます。$\gamma$ はオイラーの定数で、およそ $0.57721$ の値をとります。
 

scipy.special.sici()

 scipy.special.sici() は正弦積分と余弦積分の値を返します。

# PYTHON_SINC_03

import numpy as np
from scipy.special import sici
import matplotlib.pyplot as plt

# 区間[-6,6]を512分割
x = np.linspace(-10, 10, 513)

# 正弦積分
si = sici(x)[0]

# 余弦積分
ci = sici(x)[1]

# FigureとAxes
fig = plt.figure(figsize=(6.5, 5))
ax = fig.add_subplot(111)
ax.grid()
ax.set_xlabel("x", fontsize=15)
ax.set_ylabel("si(x), ci(x)", fontsize=15)
ax.set_xlim(-6, 6)
ax.set_ylim(-2, 2)

# グラフをプロット
ax.plot(x, si, color = "blue", label="si(x)")
ax.plot(x, ci, color = "red", label="ci(x)")

# 凡例を表示
ax.legend(loc="upper left")

# 画像を保存
plt.savefig("sici.png", bbox_inches = "tight")

 正弦積分と余弦積分 scipy.special.sici()

 [参考文献] https://ja.wikipedia.org/wiki/Sinc関数