ヘビサイドの階段関数とは?定義・性質・デルタ関数との関係をわかりやすく解説

スイッチを入れた瞬間に電灯が点く。時刻 $t=0$ で外力が加わる。ある地点を超えたら故障フラグを立てる。このように、ある時刻や位置を境にして値が「0から1へ切り替わる」現象は、工学や数学に頻繁に登場します。

この切り替えを毎回「$t<0$ では0、$t\ge 0$ では1」と場合分けして書くのは少し面倒です。そこで、境界でのオン・オフを1つの関数で表す ヘビサイドの階段関数(Heaviside step function)を使います。

ヘビサイド関数は、次のような場面で特に役立ちます。

  • 信号処理: 時刻 $t=0$ から入力信号を印加する「オン信号」を表す
  • 制御工学: ステップ入力に対するシステムの過渡応答を解析する
  • 微分方程式・ラプラス変換: 区間ごとに定義された外力を、1本の式で書く
  • 物理学: 空間の片側だけに存在する電荷密度や境界条件を表す

本記事では、ヘビサイド関数の直感的な意味から始め、定義、値の曖昧さ、シフトと区間の表現、微分によるデルタ関数との関係、ラプラス変換への応用まで順に説明します。

前提知識

この記事は単独でも読めますが、関数の連続性やラプラス変換を先に押さえると、階段の「段差」がなぜ重要なのかを理解しやすくなります。

画像なし
連続関数とは?ε-δ論法と重要な定理をわかりやすく解説
関数の連続性と不連続点を理解するための基礎記事です。
画像なし
逆ラプラス変換をわかりやすく解説
ラプラス変換を使って時間領域の応答を求める方法を解説しています。

ヘビサイド関数とは?

部屋の照明を考えてみましょう。スイッチを切っている間の明るさを0、入れた後の明るさを1とすれば、スイッチを入れた時刻を境にして値が切り替わります。現実のスイッチにはわずかな遅れやチャタリングがありますが、理想化すれば切り替え時間は一瞬です。

この「境界の左では0、右では1」という理想的な切り替えを関数にしたものがヘビサイド関数です。グラフは横軸に沿って進み、ある点で段差を上がるため、階段関数と呼ばれます。

ヘビサイドの階段関数の概念図

この図では、$t=0$ より前は信号がオフで、$t=0$ より後はオンになっています。連続な傾きを持つランプ信号と違い、ヘビサイド関数は境界で急に値を変えます。この急な変化を扱えることが、インパルス応答やスイッチング現象を記述するときの強みです。

ヘビサイド関数の3つの値の規約

原点の左側と右側の値は共通ですが、$t=0$ の点だけは規約によって変わります。連続時間の通常の積分では、この1点をどこに置いても面積は変わりません。ただし、離散化した信号ではこの点をサンプルとして読むため、規約の違いが結果に現れます。

では、この直感を数式にします。

定義と $t=0$ での値

標準的なヘビサイド関数 $H(t)$ は、次のように定義します。

$$ H(t)= \begin{cases} 0 & (t<0),\\ 1 & (t>0). \end{cases} $$

$t<0$ ではスイッチが入る前なので0、$t>0$ では入った後なので1です。ところが、この定義には $t=0$ の値が書かれていません。ここがヘビサイド関数を扱うときの最初の注意点です。

代表的な約束には、次の3つがあります。

$$ H(0)=0,\qquad H(0)=1,\qquad H(0)=\frac{1}{2}. $$

どれを選ぶべきかは、問題の目的によって変わります。通常の微分方程式で「時刻0以降に入力する」という意味なら $H(0)=1$ と置くことがあります。一方、フーリエ変換や対称な正則化を考えると $H(0)=1/2$ が自然です。連続分布のように1点の値が積分へ影響しない場面では、どの値を選んでも結果が同じになる場合があります。

重要なのは、$H(0)$ の値を無意識に混在させないことです。特に離散時間の信号や、境界点を含む区間の判定では、0、1、1/2の選択が結果に影響します。

ここまでで、関数の形と境界の注意点がわかりました。次は、階段を任意の位置へ移動して、実際の信号を表せる形にします。

シフトしたヘビサイド関数

切り替えが $t=0$ で起きるとは限りません。例えば、時刻 $t=t_0$ でスイッチを入れる場合を考えます。横軸を $t_0$ だけ右へ移動するには、関数の引数を $t-t_0$ に置き換えます。

$$ H(t-t_0)= \begin{cases} 0 & (tt_0). \end{cases} $$

$t=t_0$ より前では $t-t_0<0$ なので0、後では $t-t_0>0$ なので1です。この形は「$t_0$ から始まる信号」を表す基本部品になります。

ヘビサイド関数を時間方向へシフトした様子

シフト量 $t_0$ が大きくなるほど、立ち上がりは右へ移動します。関数の形を変えずに、切り替えが起きる時刻だけを引数で指定できることがポイントです。

例えば、振幅 $A$ の信号を $t_0$ からオンにするなら、

$$ x(t)=A H(t-t_0) $$

です。$A$ を掛けることで、オンになった後の高さを1から $A$ へ変えています。さらに、オンになった後に指数関数的に減衰する信号なら、

$$ x(t)=A e^{-\alpha(t-t_0)}H(t-t_0) $$

と書けます。$tt_0$ では指数関数が有効になります。

この「関数に $H(t-t_0)$ を掛けて、ある時刻より前を消す」という考え方は、ラプラス変換で非常に頻繁に使います。次は、1つのパルスを2つの階段の差として表してみましょう。

有限区間のパルスを表す

時刻 $t=a$ でオンになり、時刻 $t=b$ でオフになる矩形パルスを考えます。ただし $a

$$ p(t)=H(t-a)-H(t-b) $$

区間ごとに確認すると、

$$ p(t)= \begin{cases} 0 & (tb). \end{cases} $$

これは、階段関数を「足し算・引き算できる部品」として使う発想です。高さ $A$ のパルスなら、

$$ p_A(t)=A\{H(t-a)-H(t-b)\} $$

となります。実際に $a=1, b=3$ とすると、1秒から3秒までだけ値1を持つパルスが得られます。

2つの階段の差で表した矩形パルス

左の階段は $t=1$ で立ち上がり、右の階段は $t=3$ で立ち上がります。2つを引くと、最初の立ち上がりだけが残り、$1

矩形パルスを構成する2つの段差

パルスの形は、中央の平らな部分よりも、両端の2つのエッジに注目すると理解しやすくなります。開始点の段差を足し、終了点の段差を引くという構成は、複数の区間を持つ信号にもそのまま拡張できます。

この表現を使うと、区分的に定義された複雑な入力も、階段の和として整理できます。次は、階段関数の最も重要な微分関係を見ていきます。

ヘビサイド関数を微分するとデルタ関数になる

通常の関数として見ると、ヘビサイド関数は $t=0$ で不連続です。不連続点では通常の意味の微分は定義できません。しかし、広義関数(分布)の意味では、ヘビサイド関数の微分を定義できます。その結果がディラックのデルタ関数です。

$$ \frac{d}{dt}H(t)=\delta(t) $$

デルタ関数は、$t=0$ に集中した単位面積のインパルスです。直感的には、階段が一瞬で1だけ上がるとき、その変化率は $t=0$ にすべて集中していると考えます。

階段関数の段差とデルタ関数の関係

階段関数の段差が急になるほど、微分の結果は狭く高い山に集中します。面積を1に保ったまま幅を0へ近づける極限がデルタ関数であり、通常の有限な高さの関数とは異なる分布として扱います。

この関係を積分で確認します。区間 $[-\varepsilon,\varepsilon]$ で両辺を積分すると、

$$ \int_{-\varepsilon}^{\varepsilon}\frac{d}{dt}H(t)\,dt =H(\varepsilon)-H(-\varepsilon)=1-0=1. $$

一方、デルタ関数は原点を含む区間で積分すると1なので、

$$ \int_{-\varepsilon}^{\varepsilon}\delta(t)\,dt=1 $$

となり、両者の総変化量が一致します。ここで大切なのは、デルタ関数を「高さが無限大の普通の関数」と考えすぎないことです。デルタ関数は、積分したときの作用によって定義される分布です。

シフトした階段についても同じことが成り立ちます。

$$ \frac{d}{dt}H(t-t_0)=\delta(t-t_0) $$

段差の位置が $t_0$ に移動したので、微分結果のインパルスも $t_0$ に移動します。矩形パルスの場合は、

$$ \frac{d}{dt}\{H(t-a)-H(t-b)\} =\delta(t-a)-\delta(t-b) $$

です。パルスの開始点では正のインパルス、終了点では負のインパルスが現れます。これは、信号の変化点だけを検出するエッジ検出の考え方にもつながります。

ここまでの微分関係を、次は積分の側から見直します。デルタ関数を積分すると、なぜ階段が現れるのでしょうか。

デルタ関数を積分すると階段になる

デルタ関数を左端から積分すると、積分区間が原点を含んだ瞬間に値が1増えます。

$$ \int_{-\infty}^{t}\delta(\tau)\,d\tau=H(t) $$

$t<0$ なら積分区間に原点が含まれないので0です。$t>0$ なら原点を通過してデルタ関数の全質量1を拾うため、値は1になります。階段関数は、インパルスを累積したものだと理解できます。

デルタ関数を積分して得られる階段関数

デルタ関数が現れる時刻を通過する前は累積量が0で、通過した後に1へ到達します。微分と積分が、段差とインパルスを介して互いに逆の操作として対応していることが読み取れます。

この見方は、速度と位置の関係にも似ています。速度を積分すれば位置の変化が得られるように、瞬間的な変化率であるデルタ関数を積分すれば、累積された段差であるヘビサイド関数が得られます。

ただし、原点での値は積分だけでは決まりません。積分は1点の値を区別しないため、$H(0)=0$ と $H(0)=1$ の違いを積分結果から判定できない場合があります。対称な近似を使うと、極限として $H(0)=1/2$ が現れることがあります。

では、この階段を使って、実際に区分的な入力をラプラス変換してみましょう。

ラプラス変換での利用

ラプラス変換では、時間領域の信号を複素周波数領域へ移します。ヘビサイド関数のラプラス変換は、定義から直接計算できます。

$$ \mathcal{L}\{H(t)\} =\int_0^\infty H(t)e^{-st}\,dt $$

$t>0$ では $H(t)=1$ なので、

$$ \mathcal{L}\{H(t)\} =\int_0^\infty e^{-st}\,dt =\left[-\frac{1}{s}e^{-st}\right]_0^\infty =\frac{1}{s},\qquad \operatorname{Re}(s)>0. $$

ここでは、ヘビサイド関数を掛けることで「入力が始まる前の時間」を積分から自然に除いています。時刻 $t_0$ からオンになる階段の変換は、

$$ \mathcal{L}\{H(t-t_0)\}=\frac{e^{-st_0}}{s} $$

です。指数因子 $e^{-st_0}$ は、時間遅延がラプラス領域で乗算因子になることを示しています。

さらに、遅延した関数 $f(t-t_0)$ を $t_0$ 以降だけ有効にする場合、第二移動定理として

$$ \mathcal{L}\{f(t-t_0)H(t-t_0)\}=e^{-st_0}F(s) $$

が成り立ちます。例えば、時刻2から始まる減衰信号

$$ x(t)=e^{-(t-2)}H(t-2) $$

のラプラス変換は、$f(t)=e^{-t}$ の変換 $F(s)=1/(s+1)$ を使って、

$$ X(s)=\frac{e^{-2s}}{s+1} $$

となります。時間領域での「2秒遅れ」が、周波数領域では $e^{-2s}$ として現れました。

この性質により、スイッチ入力、遅延入力、区間限定の外力を、ラプラス変換で機械的に扱えます。次にPythonでグラフを描き、階段の組み合わせを視覚的に確認します。

Pythonで形を確認する

次のコードでは、標準階段、遅延階段、2つの階段の差で作った矩形パルスを描画します。

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(-1, 5, 1201)
H = lambda x: (x >= 0).astype(float)

standard = H(t)
delayed = H(t - 2)
pulse = H(t - 1) - H(t - 3)

fig, axes = plt.subplots(3, 1, figsize=(8, 7), sharex=True)
axes[0].plot(t, standard, label="標準階段 H(t)")
axes[1].plot(t, delayed, label="遅延階段 H(t−2)", color="tab:orange")
axes[2].plot(t, pulse, label="矩形パルス H(t−1)−H(t−3)", color="tab:green")

for ax in axes:
    ax.axhline(0, color="black", linewidth=0.8)
    ax.axvline(0, color="gray", linestyle="--", linewidth=0.8)
    ax.set_ylabel("値")
    ax.grid(alpha=0.3)
    ax.legend(loc="upper left")

axes[-1].set_xlabel("時刻 t")
fig.suptitle("ヘビサイド関数のシフトと組み合わせ")
fig.tight_layout()
plt.show()

標準階段は $t=0$、遅延階段は $t=2$ で立ち上がっており、引数の $-2$ がグラフを右へ移動させることがわかります。下段では、$t=1$ の正の段差と $t=3$ の負の段差が組み合わさり、その間だけ値1を持つパルスになっています。階段関数は、複雑な信号を「変化点の列」として組み立てる道具だと読み取れます。

具体例:区分的な外力を1本の式で書く

時刻 $t=0$ から $t=2$ までは外力が2、$t=2$ 以降は外力が $-1$ になる入力を考えます。場合分けなら、

$$ f(t)= \begin{cases} 2 & (0\le t<2),\\ -1 & (t\ge 2) \end{cases} $$

です。階段関数を使うと、最初の値2を $2H(t)$ で作り、$t=2$ で値を3だけ下げます。

$$ f(t)=2H(t)-3H(t-2). $$

実際に区間ごとに確認します。$02$ では両方が1となり、$f(t)=2-3=-1$ です。

この表し方のポイントは、値そのものではなく「どこでどれだけ変化したか」を記述していることです。初期値2を立ち上げ、時刻2で3を引く。この見方は、複数の負荷が順番に加わる機械系や、段階的に切り替わる制御入力を表すときに便利です。

階段関数と指示関数の関係

ヘビサイド関数は、条件を満たしているかどうかを0と1で表す 指示関数 とも考えられます。集合 $A$ の指示関数を $\mathbf{1}_A(t)$ と書くと、

$$ \mathbf{1}_{[0,\infty)}(t)=H(t) $$

です。$t$ が区間 $[0,\infty)$ に入っていれば1、入っていなければ0になります。この見方を使うと、区間 $[a,b]$ の指示関数は、

$$ \mathbf{1}_{[a,b]}(t)=H(t-a)-H(t-b) $$

と書けます。つまり、階段の差は「条件を満たす範囲を切り出すマスク」です。

このマスクという考え方は、積分を区間に制限するときにも便利です。例えば、関数 $f(t)$ を $a\le t\le b$ の範囲だけ積分したいなら、

$$ \int_{-\infty}^{\infty}f(t)\{H(t-a)-H(t-b)\}\,dt =\int_a^b f(t)\,dt $$

となります。左辺では全実数上で積分していますが、波括弧の中身が区間の外で0になるため、実際に寄与するのは $[a,b]$ の部分だけです。

ヘビサイド関数で区間を切り出すマスク

マスクは指定した区間の内部だけで1、それ以外で0になります。関数にこのマスクを掛けると、区間外の値を積分や集計から除外できます。

これは単なる書き換えではありません。区分的な積分、有限時間だけ動作するセンサー、窓関数を使った信号解析を、同じ記法で扱えるようになります。条件分岐を積分の中へ押し込める点が、指示関数としてのヘビサイド関数の利点です。

複数の段差を持つ関数

段差が1つだけの信号は $H(t-t_0)$ で表せますが、現実の入力は何度も切り替わります。時刻 $t_1,t_2,\dots,t_n$ で値が変わる関数を考えましょう。

初期値を $c_0$、時刻 $t_k$ での値の変化量を $\Delta c_k$ とすると、関数は

$$ f(t)=c_0+\sum_{k=1}^{n}\Delta c_k H(t-t_k) $$

と書けます。ここで $\Delta c_k$ は「段差の前後でどれだけ値が変わったか」です。値が $c_{k-1}$ から $c_k$ へ変わるなら、

$$ \Delta c_k=c_k-c_{k-1} $$

と置きます。例えば、$t<1$ で0、$1\le t<3$ で2、$t\ge3$ で-1となる関数なら、最初の段差は $+2$、次の段差は $-3$ です。

$$ f(t)=2H(t-1)-3H(t-3). $$

この式を微分すると、

$$ f'(t)=2\delta(t-1)-3\delta(t-3) $$

となります。元の関数の値を細かく追いかけなくても、どの時刻でどれだけ変化したかをデルタ関数の列として取り出せます。階段関数とデルタ関数は、累積量と変化量の対になっているわけです。

複数の段差の表現は、デジタル信号の波形を数式化するときにも使えます。ビット列の各ビットが一定時間だけ有効になるなら、区間の開始と終了に段差を置いて、全体を階段関数の和として構成できます。信号の意味を「高さ」ではなく「エッジの位置」として見ることで、波形の構造が明瞭になります。

複数の段差の和で表した区分的な信号

各段差は、その時刻での値の増減だけを担当します。段差を足し合わせると、区分的な関数全体が再構成されます。

畳み込みとステップ応答

制御工学では、入力信号とシステムの応答を畳み込みます。線形時不変システムのインパルス応答を $g(t)$ とすると、入力 $x(t)$ に対する出力は

$$ y(t)=\int_{-\infty}^{\infty}g(t-\tau)x(\tau)\,d\tau $$

です。ここで入力を単位ステップ $x(t)=H(t)$ とすると、

$$ y(t)=\int_{-\infty}^{\infty}g(t-\tau)H(\tau)\,d\tau =\int_0^t g(t-\tau)\,d\tau $$

となります。変数 $u=t-\tau$ と置換すれば、

$$ y(t)=\int_0^t g(u)\,du $$

です。つまり、ステップ応答はインパルス応答を累積したものです。先ほど「デルタ関数を積分すると階段になる」と説明した関係が、今度はシステムの入出力関係として現れています。

例えば、一次遅れ系のインパルス応答を

$$ g(t)=\frac{1}{\tau}e^{-t/\tau}H(t) $$

とすると、単位ステップ入力に対する出力は

$$ y(t)=\int_0^t \frac{1}{\tau}e^{-u/\tau}\,du =1-e^{-t/\tau} $$

です。入力そのものは瞬間的に1へ切り替わりますが、出力は時間をかけて1へ近づきます。この違いが、理想的な入力と現実のシステム応答を分けています。

一次遅れ系のステップ応答

ステップ入力は瞬間的に変化するのに対し、一次遅れ系の出力は指数関数的に変化します。応答が最終値の約63.2%に達する時刻が時定数 $\tau$ です。

ステップ関数は入力を表すだけでなく、システムの速さを測るテスト信号にもなります。実験でスイッチを入れた後の応答を観測すれば、時定数 $\tau$ や定常値を推定できます。ここで階段関数を学ぶことが、伝達関数や周波数応答の理解に直接つながります。

$H(0)$ はいつ問題になるのか

「1点の値は積分に影響しない」と説明しましたが、いつでも無視できるわけではありません。連続時間の通常の積分では、1点の値を変えても積分値は変わりません。しかし、次のような場面では注意が必要です。

第一に、離散時間信号です。サンプリング点がちょうど切り替え時刻に一致すると、その点の値がサンプル列に含まれます。$H(0)=0$ と $H(0)=1$ では、最初のサンプルが変わります。

第二に、境界を含む条件判定です。「$t\ge t_0$ で処理を開始する」のか「$t>t_0$ で開始する」のかは、プログラムの >=> の違いに対応します。数学の記法でも、区間を閉区間にするか半開区間にするかを明示しておくと混乱を避けられます。

第三に、対称性を利用する変換です。フーリエ変換や分布の理論では、左右から同じように近づく滑らかな近似の極限として $H(0)=1/2$ を採ることがあります。これは「常に1/2が正しい」という意味ではなく、対称な規約を採用したという意味です。

したがって、記事や計算ノートでは、最初に $H(0)$ の規約を書いておくのが安全です。規約が違っても、連続時間の積分結果が一致することはあります。しかし、信号の値そのもの、離散化、境界条件では一致しない可能性があります。

ここまでで、階段関数を単独のグラフとしてではなく、指示関数、段差の列、システム入力として見られるようになりました。最後に、滑らかな近似を使う理由と限界を確認します。

近似した階段関数と数値計算上の注意

ヘビサイド関数は不連続なので、勾配降下法などの数値最適化では扱いにくいことがあります。そこで、滑らかな近似としてシグモイド関数や双曲線正接を使います。

$$ H_k(t)=\frac{1}{1+e^{-kt}} $$

$k$ が大きいほど切り替えが急になり、$k\to\infty$ で $t\ne0$ の範囲ではヘビサイド関数に近づきます。別の近似として、

$$ \widetilde{H}_k(t)=\frac{1}{2}\{1+\tanh(kt)\} $$

も使えます。どちらも $t=0$ では $1/2$ になり、左右対称な切り替えを表します。

ただし、近似した関数は本物の階段関数と同じではありません。切り替えの前後に幅があり、微分も有限の山になります。物理的なスイッチの遷移時間を表したいなら近似が適していますが、理論上の境界を正確に表すならヘビサイド関数を使う方が自然です。

ヘビサイド関数と滑らかな近似

$k$ が大きい近似ほど切り替えは急になりますが、有限の $k$ では必ず遷移幅が残ります。数値最適化では微分可能性が便利で、理想化した解析では不連続性そのものが便利です。

また、浮動小数点数で t >= 0 を判定する場合、計算誤差で境界付近の結果が意図と異なることがあります。境界を厳密に扱う必要がある数値計算では、許容誤差やサンプリング間隔を明示しておきましょう。

まとめ

ヘビサイドの階段関数は、ある境界を境に値を0から1へ切り替える関数です。単純な形ですが、信号処理、制御、微分方程式、物理学をつなぐ重要な記法になっています。

  • 標準形は $H(t)=0$($t<0$)、$H(t)=1$($t>0$)である
  • $H(t-t_0)$ と書けば、立ち上がり時刻を $t_0$ へ移動できる
  • $H(t-a)-H(t-b)$ は、区間 $[a,b]$ だけ有効な矩形パルスを表す
  • 広義関数の意味で $dH/dt=\delta$ が成り立つ
  • ラプラス変換では時間遅延が $e^{-st_0}$ として現れる
  • 数値計算や機械学習では、シグモイドなどの滑らかな近似を使うことがある

階段関数を理解すると、次は「階段入力を受けたシステムがどう応答するか」という制御工学の問題へ進めます。また、デルタ関数と畳み込みを学ぶと、入力信号とシステムのインパルス応答から出力を求める考え方へ自然につながります。

次に読む記事として、以下も参考にしてください。