複数の次元で参照されるので分離しました(2021.3.8)
#ディラックのデルタ関数
単位インパルス関数ともいう様です。
デルタ関数とヘヴィサイドの階段関数
ディラックのデルタ関数 (Dirac delta function) はx=0で無限大、その他の区間で
0の値をもち、全区間での積分が1となるように定義された特殊な関数です。
\delta (t) = \left\{
\begin{array}{ll}
0 & (t \neq 0) \\
\infty & (t = 0)
\end{array}
\right.
\int_{-\infty}^{\infty}\delta (t)dx=1
積分するとステップ関数sympy.Heaviside(t)になります。
import sympy as sym
# 記号t,vを定義
sym.var("t,v")
# v = δ(t)
v = sym.DiracDelta(t)
dm = v.subs(t, -1)
d0 = v.subs(t, 0)
dp = v.subs(t, 1)
d_list = [dm, d0, dp]
print("[δ(-1), δ(0), δ(1)] =", d_list)
# デルタ関数の不定積分
i = sympy.integrate(v, t)
print("∫δ(t)dx =", i)
#出力結果
[δ(-1), δ(0), δ(1)] = [0, DiracDelta(0), 0]
∫δ(t)dx = Heaviside(t)
#ヘヴィサイドのステップ関数
単位ステップ関数ともいう様です。
x<0で0,0<xで1となるように定義された不連続関数をヘヴィサイドの階段関数 (Heaviside step Function)、あるいはヘヴィサイド関数 (Heaviside Function) とよびます。
H(t) = \left\{
\begin{array}{ll}
0 & (t < 0) \\
1 & (t < 0)
\end{array}
\right.
ヘヴィサイド関数を微分するとデルタ関数となります。これはヘヴィサイド関数の原点における接線の傾きが∞となることを表しています。このように、デルタ関数を用いると不連続関数の微分を求めることができます。
\frac{dH(t)}{dt}=\delta(t)
import sympy as sym
from sympy.plotting import plot
# 記号t,vを定義
sym.var("t,v")
# v = H(t)
v = sym.Heaviside(t)
# H(-1)
hm = sym.Heaviside(-1)
# H(0)
h0 = sym.Heaviside(0)
# H(1)
hp = sym.Heaviside(1)
h_list = [hm, h0, hp]
print("[H(-1), H(0), H(1)] =", h_list)
# ヘヴィサイド関数をxで微分
dy_dx = sympy.diff(v, t)
print("dH(x)/dx =", dy_dx)
#[-5, 5]の範囲でヘヴィサイドの階段関数をプロット
p = plt(y, (x, -5, 5), xlabel = "t", ylabel = "v")
#出力結果
[H(-1), H(0), H(1)] = [0, Heaviside(0), 1]
dH(x)/dx = DiracDelta(t)