2009年02月24日

デルタ関数の定義とグラフのプロット

ディラックのデルタ関数の基本的な定義と性質は前回見たけど、 数式としての定義は特にしていなかった。

定義の仕方はいろいろある。けども、大体以下のポイントを抑えたものが使われる(っぽい)。

  • -∞〜+∞の区間で積分すると1になる
  • x=0において無限大の値をとる

前回の(1)の定義によるとδ(x)はx=0以外の点で0にならないといけないんだけど、これはどうも無視されることがあるらしい。 というのも、デルタ関数を実際に使うにあたって重要なのは前回でいう性質の2つ目、式(4)のところで説明した「値を抜き出す」 ということであって、これが守られれば少々のことは無視してもおkということらしい。

とりあえず教科書に載ってるのを列挙する。過程とかあまり書いてないので説明は無理っぽ。 ただ少なくとも最初に書いた2つの点は抑えてる。

1個目。

20090224eq01

2個目。

20090224eq02

これは実質的に1個目と同じらしい。Imというのは複素数の虚部を取り出す演算子。iは虚数単位で√-1。

3個目。

20090224eq03

おなじみ正規分布の密度関数を平均=0のもとで分散を0に限りなく近づけた場合と同じ。 これはもともと確率の密度を与える式なんだから全区間積分すると1になるってのは分かりやすい。 分散が0になるとx=0の部分が無限大に近づくというのもイメージしやすい。個人的に一番「それっぽい」気がする。

4個目。

20090224eq04

これが最初に言った定義を「少々無視」する形式。sin axはaをでかくすると0付近でどんどん激しく振動するだけで収束はしない。 ただ、この形をデルタ関数としておくとフーリエ変換の際などに便利らしく、この定義が結構頻繁に使われるぽい。

教科書的には式(4)は三角級数からいくつかのステップを踏んで誘導する感じで紹介されてるけど、 そもそもその三角級数が出てきた経緯がちょっと分からなかったので完成したブツだけ。

この4つについて適当なaの値を与えてグラフをプロットし挙動を観察してみる。

まず式(1)。そんな無茶苦茶早く収束するっていうわけでもない感じ。

Delta1

 

式(2)。プロットすると式(1)と同じものだってことがよく分かる。ちなみにRで複素数の虚部を取り出す関数はIm()。 複素数のオブジェクトを作って虚部にだけ値を与えるにはcomplex(imaginary=1)などとする。 一応ここだけプロットに使った関数のソース。

Delta.2 <- function(a, x){
 a <- complex(imaginary=1/a)
 Im((pi*(x-a))^-1)
 }

Delta2

 

式(3)。収束が早いっぽい。

Delta3

 

そして式(4)。aの値を大きくするとブレがむしろ拡大していくのが分かる。

※「ブレが拡大」という部分ですが、軽い指摘を頂いたのでよくよく考えてみたら確かに微妙な表現だと思えてきました。 x=0の付近で値は激しく振動し、ピークは鋭くなっていくわけですが、周辺での振幅は拡大されるわけではありません。 試しにa=200とした場合のグラフを描いてみました(↓に追加してあります。 もっと大きくてもいいのですがこれ以上だと塗りつぶされてしまいます。)。周辺部の振幅で言えばこれは同じと言うべきでしょう。重要なのは 「収束はしないものの、激しく振動しつつx=0でのピークが高く鋭くなっていく」という点でしょう。ちなみに教科書↓の表現を要約しますと、 「sin axはa→∞としても0となるわけではない。しかしa→∞で激しく振動するため、『値を抜き出す』性質は成立する」。 (2009/02/24 追記)

 

Delta4

Delta5

で今日はおしまい。ええ、手抜きです。

…なんだけど、Rで数式書くのが案外面倒だった。なので数式の部分だけメモっておく。 使うときはプロットのmain=とかの後にそのまま突っ込むだけ。

#式(1)
 expression(lim(over(a, pi(x^2+a^2)), a %->% 0))
#式(2)
 expression(lim(paste(Im, over(1, pi(x-ia))), a %->% 0))
#式(3)
 expression(lim(paste(over(1, paste(a, sqrt(pi))),exp,
 bgroup("(", paste("-",over(x^2, a^2)), ")")), a %->% 0))
#式(4)
 expression(lim(over(paste(sin," ",ax), paste(pi,x)), a%->%infinity))
#ついでにプロット時の余白の設定
 par(mar=c(3,3,3,1), mgp=c(2,1,0))

試行錯誤しながら書いた部分があるので正しくないかもしれない。式(3)とかなんだかpaste()たくさん使ってるし。 expression()の使い方あまり把握しきれてない気がする。

やっぱ数式書くならLaTeXのが楽だ。いちいち書き方調べなくても勘で大体書けるし。 LaTeX使って式を挿入する方法を調べないといけない。 どうもPSfragとかいうのでポストスクリプトの中身を書き換えられるらしい。 それでいけるのかも。また今度。

教科書

posted by Rion778 at 02:34 | Comment(0) | TrackBack(0) | 勉強ノート | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス: [必須入力]

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL(言及がない、関連がないと判断した場合削除することがあります)
http://blog.seesaa.jp/tb/114722819
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。