JS でもわかる! はじめてのデルタ関数

タイトルはほぼ嘘ですができるだけ誠実に書きました.


みなさん,デルタ関数というものはご存知だと思います.制御工学ではインパルス関数とも呼ばれますね.

よく知られているように,デルタ関数は↓のような形をしています.

Dirac distribution PDF” by PAR~commonswiki is licensed under CC BY-SA 3.0

 

制御の教科書なんかで使われる定義としては,

 
  \delta (x) = \left\{
    \begin{array}{l}
      \infty \; \; (x = 0) \\
      0 \; \; (x \neq 0)
    \end{array}
  \right.

という感じでしょうか.


\displaystyle{\int_{-\infty}^\infty f(x) \delta (x) dx = f(0)}

なる性質を満たすというのも触れられます.


しかしながら,上の定義は問題を孕んでいます.まずもって  \infty は値ではないため,ある値に対しある値を対応付けるという関数の定義からは逸脱している気がします.それから


\displaystyle{\int_{-\infty}^\infty f(x) \delta (x) dx }

という積分もかなりあやしい. \delta(x) はほとんどいたるところ  0 であり,積分しても  0 であるはずなので.

この辺について,制御工学の教科書ではふつう「デルタ関数は通常の関数ではなく,超関数である.詳しい解説は数学書に譲ることとし,ここでは各性質が成り立つものとして話をすすめる」みたいな言い方がされます.これはまあしかたないんですが,それでももう少し突っ込んで議論してみたいと感じるのが人間の性です.

というわけで,デルタ関数について厳密な定義を与えてみよう,というのがこの記事の趣旨になります.

超関数の定義

デルタ関数Schwartz 超関数の一種です*1.この記事では超関数といえば Schwartz 超関数を指すことにします.

超関数を定義する際の根本的なアイデアは,(ふつうの)関数に対する*2関数,つまり関数へ働きかけるなにがしかとして捉えることです.とりあえずこの漠然としたコメントを念頭におきつつ頑張っていきます.

まず超関数が働きかける対象の関数として,テスト関数というものを定義しましょう. \mathcal{D} = C^\infty_0 (\mathbb{R}) を,サポート( f(x) \neq 0 なる  x の集合)が有界かつ無限回微分可能な  \mathbb{R} 上の関数全体がなす無限次元ベクトル空間とします.

こいつに位相を突っ込んでいきます. f, g \in \mathcal{D} と十分小さい  \epsilon_i に対して


\displaystyle{  \sup_{x \in \mathbb{R}} \left| f^{(i)} (x) - g^{(i)} (x) \right| < \epsilon_i \; \; (i \in \mathbb{N}) }

が成り立つときに  f g は近いとして位相を入れます.つまり,微分も込みで近さを考えることにするわけです.特に,


\displaystyle{ \forall i \in \mathbb{N} , \; \; \sup \left|f_n^{(i)} (x) \right| \to 0 }

であれば  \{ f_n \}_{n \in \mathbb{N} } \to 0 とします.こうしてできた空間がテスト関数空間  \mathcal{D}です.


ここからさっそく超関数の定義が出てきます. \mathcal{D} 上の連続線型汎関数を超関数と呼びます.ここで \mathcal{D} 上の汎関数  \mu とは, f \in \mathcal{D} なる入力に対してある複素数 \mu [ f ] を出力するような装置  \mu :  \mathcal{D} \to \mathbb{C} をいいます.超関数全体を  \mathcal{D}' で書き, \mathcal{D}双対空間と呼びます.
たとえば与えられたテスト関数  f(x) について  f(0) を出力するような  \mu [ f (x) ] = f(0) や適当な区間での定積分を返す  \mu [ f(x) ] = \int_a^b f(x) dx は超関数です.前者がデルタ関数であるというのは大丈夫ですね.

ちなみに超関数は微分を考えることができます.詳しくは触れませんが  \mu \in \mathcal{D}'導関数 \mu ' [ f ] = - \mu [ f' ] で定義します.

とにかくこうしてデルタ関数の定義を与えることができるようになりました.ここできちんと書いておきますね.デルタ関数とは, \mathcal{D} 上の連続線型汎関数  \delta であって, \delta [ f(x) ] = f(0) となるようなものをいいます.

ここまでが超関数の定義に関する話です.以後,超関数の性質について見ていきます.

絶対可積分関数と超関数

 \nu(x) を絶対可積分な関数,すなわち

 \displaystyle{ \int_{-\infty}^\infty | \nu(x) | dx < \infty }

を満たすような関数とします.このとき, f \in \mathcal{D} に対する  \nu の作用を

 \displaystyle{ \nu[f] = \int_{-\infty}^{\infty} \nu (x) f(x) dx }

と定めれば  \nu は超関数に他なりません( f のサポートが有界なので上記の積分が定まることに注意).特に自乗可積分関数  \nu \in L^2 についても同様に超関数と見なせます.

 L^2 関数についてもう少し見ていきます.以下のような定理が成り立つことが知られています:

 L^2 関数の列  \{ \nu_n \}_{n \in \mathbb{N} } について,任意の  f(x) \in \mathcal{D} に対し

 \displaystyle{ \nu_n [ f ] = \int_{-\infty}^{\infty} \nu_n(x) f(x) dx }

 n \to \infty である値に収束するなら,ある超関数  \mu \in \mathcal{D}' が存在して,

 \displaystyle{ \mu [f] = \lim_{n \to \infty} \int_{-\infty}^{\infty} \nu_n(x) f(x) dx }

となる.これを  \mu = \lim_{n \to \infty} \nu_n と表す.

これは逆も成り立ちます.すなわち,

任意の  \mu \in \mathcal{D}' に対してある  L^2 関数の列  \{ \nu_n \}_{n \in \mathbb{N} } が存在して

 \displaystyle{ \mu [f] = \lim_{n \to \infty} \int_{-\infty}^{\infty} \nu_n(x) f(x) dx }

とできる.

つまり,任意の超関数は適当な"行儀のよい"関数でうまく近似できます.

この近似について,デルタ関数は Gaussian の極限であるという具体例を示したいと思います.平均  0 で分散  s正規分布確率密度関数

 \displaystyle{ \nu_s (x) = \frac{1}{\sqrt{2\pi s}} \exp \left(-\frac{x^2}{2s} \right)}

で与えられます.

 \{ \nu_s \} そのものは  s \to 0 で収束しませんが,任意の  f \in \mathcal{D} に対して

 \displaystyle{ \int_{-\infty}^\infty \nu_s(x) f(x) dx }

 s \to 0 で確定します.実際, x = 0 の近傍の外側では  \nu_s(x) \to 0 \; (s \to 0) であるために積分への寄与は  x = 0 の近傍に限られます. f は無限回微分可能なので Taylor 展開できて,

 f(x) = f(0) + f'(0)x + O(x^2)

となりますが,高次の項は  s \to 0 において無視できるため

 \displaystyle{ \lim_{s \to 0} \int_{-\infty}^\infty \nu_s(x) f(x) dx \simeq \frac{1}{\sqrt{2\pi s}} \int_{-\infty}^\infty \exp \left(-\frac{x^2}{2s} \right) f(0) dx = f(0) }

となります.最後で Gauss 積分を使っているのは大丈夫でしょうか.

これがどういうことかと言うと,Gaussian は超関数として見たときは  s \to 0 において収束して,その極限がデルタ関数であるということです.

デルタ関数の Fourier 変換

最後に Fourier 変換を考えておきます.一般に  f \in \mathcal{D} の Fourier 変換  \hat{f}  \mathcal{D} に属すると限らないため,ここではテスト関数空間により強い制約を課します.具体的には,ある定数  M > 0 と任意の  k \in \mathbb{N} に対して

 \displaystyle{ \forall n  \in \mathbb{N} , \; \; \left| f^{(n)} (x) \right| \le \frac{M}{|x|^k}  }

を満たすような  f の全体について考えることとします.つまり, f x = 0 の遠方でかなり速く減衰することを要求するわけです.例として,無限回微分可能でサポートがコンパクトなら上の性質を満たします.こうした制約を課した場合に限って  \hat{f} f と同等のクラスに含まれることが知られています.かかるテスト関数は急減少関数と呼ばれ,その全体を  \mathcal{S} で書きます.以下では  \mathcal{S} 上の超関数について考え,その全体を  \mathcal{S}' と書くことにします.

 \mu \in \mathcal{S}' の Fourier 変換  \hat{\mu}

 \displaystyle{ \hat{\mu} [ f ] = \mu [ \hat{f} ] }

によって定義されます.


この定義をもとに,デルタ関数の Fourier 変換を求めてみましょう.

 \displaystyle{ \begin{eqnarray} \hat{\delta} [f ] &=& \delta [ \hat{f} ] = \hat{f}(0) \\ &=& \frac{1}{\sqrt{2\pi}} \left.\int_{-\infty}^{\infty} f(x) \exp (-i \omega x) dx \right|_{\omega = 0} \\ &=& \frac{1}{\sqrt{2\pi}} \int_{-\infty}^{\infty} f(x) dx \end{eqnarray}}

一方で,恒等的に  1 である関数を超関数とみなすと,

 \displaystyle{ 1 [ f ] = \int_{-\infty}^{\infty} f(x) dx }

であり,これらの式を比較すれば

 \displaystyle{ \hat{\delta} [f ] = \frac{1}{\sqrt{2\pi}} }

すなわちデルタ関数の Fourier 変換が定数関数となることが言えます*3

*1:Schwartz 超関数は一般に distribution と訳されます.hyperfunction と訳した場合は佐藤超関数を指すことになります.

*2:concerning の意味で考えてください.

*3: この  1/\sqrt{2\pi} というのは変換して逆変換したときに生じる  2\pi をどっちに押し付けるかという定義の問題なので割とどうでもよく,定数であることが本質です.