[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000897] Re: numfft



堀之内です。

高橋(北大)様:

良く読んでなかったので、このあたりで悩んでるとは思ってませんでし
た:

> 二つ目の質問です。
> ある一つの次元に対して、fft を掛ける時は、
> 多次元配列の shape は変わらないですが、
> 複数の次元に fft をかました時です。

その場合も変りません。

> 例えば、
>         na = NArray.new(Float,5,4,3)
> として、
>         na.rfft(0)
> とした時、長さ5の一次元配列を4*3=12回、fft するわけですよね。
> この時は、長さ5の fft された配列が12本、5*4*3の空間に収まりますが、
> 複数の次元に fft したいときは、もうこれ以上スペースが無いわけですから、
> 配列の形を新しく設定しなければならない。

ついで第2次元目にしたいときは、単に長さ4のfftを5*3回やります。
結果はもとと同じ 5*4*3 の配列です。イメージとしてはこんな感じ:
             
    f(x,y) ==> F(k,l)

  where

    F(k,l) ≡ \int \int f(x,y) exp(-ikx-ily) dx dy

(定数倍の部分は無視してますし連続関数に対する式を書いてますの
で実際と違います。これが定義だと思わないでください。)
これは以下のように、x について1次元的に計算して、その結果を y に
ついて計算すれば OK。勿論 y を先にやっても同じなのも分かりますね。

    f~(k,y) = \int f(x,y) exp(-ikx) dx
    F(k,l) = \int f~(k,y) exp(-ily) dy

    f'(x,l) = \int f(x,y) exp(-ily) dy
    F(k,l) = \int f'(x,l) exp(-ikx) dx

納得でしょうか?