重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

デルタ関数をフーリエ変換するプログラムを作成したいと思っています。

フーリエ変換自体のプログラムは出来上がりました。(いくつかの計算例で確認しました。)

そこで質問ですが、デルタ関数はどのように入力すれば良いのでしょうか?

F( 1 )=大きな数字、
F( 2 以降) =0
でしょうか?

デルタ関数をフーリエ変換すると、『1』になるのを確認したいと思っています。

プログラム言語は『Fortran』を使用しています。
以上、よろしくお願いします。

A 回答 (2件)

本物のデルタ関数は入力できません。


巾と高さの積が1になる擬似デルタ関数をいろいろ作って
変換してみるのがおもしろいと思いますよ。
擬似デルタ関数と離散フーリエ変換では予想と違うものが
計算されると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

早速、計算してみようと思います。

お礼日時:2014/04/27 21:20

 「フーリエ変換」と一口に仰るけれども、(Mathematicaのような数式処理プログラムなら話は別ですが)Fortranで書いた数値計算プログラムが周期のない連続関数(たとえばf(x)=exp(-(x^2))))をフーリエ変換できる筈がありませんよね。

そのプログラム(DFT: discreet Fourier transform)で扱えるのは、「周期関数をサンプリングしたもの」だけです。
 「周期関数」ってのは、入力する関数がたとえばF(1), F(2), …, F(1024)でおしまいであって、その前(F(0), F(-1), …)も後(F(1025), F(1026), …)も与えられていないということ。その数学的な意味は、「F(m)のmはどんな整数でもいいのだけれど、周期を持っていて F(m) = F(m+1024) という関係を満たす。なので、F(1), F(2), …, F(1024)を指定すれば全部決まる」ということです。
 また「サンプリングしたもの」というのは、入力が連続関数ではないということ。F(1), F(2), …の値は与えられているが、その中間、たとえばF(√2)が幾らなのか、ということは与えられていない、ってことです。これを数学的に表すと、入力関数は実は無限個のδ関数の和
  f(x) = Σ{n=-∞~∞} F(n)δ(x - 2π(n-1)/1024)
に他ならない。δ関数の中心の位置が一定間隔(2π/1024)で並んでいる訳です。
 このとき、f(x)のフーリエ変換
  g(ω) = ∫{x=-∞~∞) f(x) exp(-2πiωx) dx (iは虚数単位)
もまた、
  g(ω) = Σ{n=-∞~∞} G(n)δ(ω - 2π(n-1)/1024)
というδ関数の和になり、G(n) = G(n+1024)という周期を持つ。(証明するのはなかなか大変ですが。)で、ご質問のプログラムが計算するのはこのG(n)の値です。

 というわけで、「デルタ関数を入力する」のに最も近いことをやるには、
  F(1)=1, F(2)~F(1024)=0
とする。ただしこれで作れる関数f(x)は
  f(x) = Σ{N=-∞~∞} δ(x - 2πN)
という、2πの周期を持つ周期関数であって、本物のδ関数ではない。なので、g(ω)は定数(これは連続関数)にはならず、上記の通りδ関数の和になります。そして、その係数G(n)がどのnについても同じ値になる。
 やってみれば、これが確認できることでしょう。(ってか、何でまだやってないの?)

 なお、この計算の場合にはF(n), G(n)の虚数成分はすべて0だけれども、一般にはF(n), G(n)はどっちも複素数であることにご注意。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

参考になりました。

お礼日時:2014/04/30 21:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!