Kei Minagawa's Blog

皆川圭(@keimina)のブログ、Pythonで試したことを書いていきます

ヘビサイド関数を使って矩形関数を作る方法(Sympy)

0 or 1 をとるシンプルな関数として、ヘビサイド関数があります。本記事は、 Python のライブラリである Sympy の Heaviside 関数を使って、矩形関数を実装したときの記事です。ヘビサイド関数を用いて矩形関数を作ることができました。

1 参考文献

以下のサイトが参考になりました。

oeis.org

2ビサイド関数とは

ビサイド関数とは以下のようなグラフを出力する関数です。

f:id:keimina:20200111151158p:plain

図1. ヘビサイド関数

3 矩形関数とは

矩形関数とは以下のようなグラフを出力する関数です。

f:id:keimina:20200111151257p:plain

図2. 矩形関数

4 矩形関数をヘビサイド関数で表すには

矩形関数をヘビサイド関数で表すには、簡単に言ってしまうと、上に凸で正の値をとる2次関数の値をヘビサイド関数に与えると、矩形関数になります。以下にこれを実装したコードを記載します。

5 コード

矩形関数をヘビサイド関数で実装したコードは以下になります。

# ライブラリ読み込み(数値計算、グラフ出力用)
import numpy as np
import matplotlib.pyplot as plt

# ライブラリ(数式モデル構築用)
from sympy import Heaviside

# ヘビサイド関数は sympy.Heaviside を使用する
# numpy のベクトルに関数を適用できるように np.vectorize を使用する
f = lambda x: Heaviside(-(x - 2)*(x + 2), 0)
f = np.vectorize(f)

# 代入する x の値を定義する
xdata = np.linspace(-6, 6, 100)

# 代入する y の値を求める
ydata = f(xdata)

# 求めた xdata, ydata をプロットする
plt.plot(xdata, ydata)
plt.show(False)

6 解説

ビサイド関数は sympy.Heaviside を使用します。 sympy.Heaviside ではx=0 の時の戻り値を第2引数で設定することができます。上記コードでは第2引数に 0 を指定していることに注意します。

7 出力

以下のグラフが出力されます。-(x - 2) * (x + 2) が正になる範囲、すなわち -2 < x < 2 の範囲で 1 に、それ以外の範囲では 0 になることがわかります。

f:id:keimina:20200111151257p:plain

図3. 矩形関数

8 まとめ

sympy ライブラリの関数 Heaviside を用いて、 矩形関数を実装しました。上に凸で正の値をとる2次関数の値をヘビサイド関数に与えると、矩形関数になることがわかりました。

以上です。