[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000898] Re: numfft
堀之内です。
高橋(北大)様:
> 既に NArray パッケージをインストールし、NArray のソースを見ながら
> fft プログラムをのろのろと書き換えている最中です。
> 10月あたまくらいに fftpackのみ簡易版2をリリースできたらいいな、
> と思っております。
> # そろそろドキュメントも書き始めなきゃ。
おっと、作業の順番についてもこちらの希望が伝わってなかったようで
すみません。fftpack は後回しで fftw をお願いします。そのほうが人
のプログラムが参考に出来て断然いいです(プログラミング上達のこつ
は、いいプログラムをまねるです)。
でもって、fftpack のほうは実は ruby プログラミングのみでOKという
ことに気づきました。それなら最初から言ってくれと言いたいところで
しょう。こちらの不手際で申し訳ありません。実は、fftpack は DCL
に含まれてました。以下のドキュメントをみて頂ければお分かりのよう
に、DCLに入ってるFFTは、FFTPACKから取られています:
http://www.gfd-dennou.org/arch/dcl/dcl-f77doc/rc1/math2/node3.html
でもって、これは既に f2c されて ruby からも直接には呼べるように
なってます(http://www.gfd-dennou.org/arch/ruby/ または
http://www.gfd-dennou.org/arch/ruby/products/rbdcl/ を参照してく
ださい)。ですから、一次元配列に関しては既に使えるはずです。ただ、
まだ本当に動作するかどうか確認してません。また、fftw で行われる
ような多次元への対応も勿論まだです。したがって FFTPACK に関して
お願いしたいのは、以下のようになります(繰り返しますが、fftwを先
にして、そのあとで取り組むのが良いです)。
(1) rbdcl (これは Ruby/DCL か何かに近々改名されると思いますの
で注意して下さい。要するに DCL の直接のラッパーです。)
中の math2/fftlib の各関数を使ってみて、仕様通りの動作
をするかどうか確かめる。--- 恐らく大丈夫だろうと思います
が、一応やってみる必要があります。なお出力専用引数は、関数の
戻り値となってるはずなので注意してください。それ以外の引数は
順番も含めて同じです。ですから、以下のような対応となってる
はずです。
Fotrtran:
call sinqi(n,wsave)
call sinqf(n,r,wsave)
Ruby:
wsave = DCL.sinqi(n)
DCL.sinqf(n,r,wsave) # 配列 r (input兼output) は上書き
引数の確認は、インストールすると出来る rbdcl の src/ ディ
レクトリーの下の各パッケージのソースファイルを見てください。
(2) 多次元対応。これは ruby のみのプログラミングとなります。
その際、初期化は内部で自動的に行うべきです(無駄を省くため
に N が変化したときのみ初期化を呼ぶという工夫もできます)。
FFTPACK を使うのは、以前に書いたように fftw にはない SIN 変換、
COSINE 変換のサポートが目的なので、SIN、COS で始まる名前の
関数についてお願いします。こられの変換は正規化されないそう
なので、正変換の際に、FFTPACK の出力を 4N, 2(N-1) などの正
規化のためのファクターで割って正規化して下さい。効率上、最
後に div! を使ってということになりますね。
なお、ここまでやれば SIN/COS 変換以外もサポートするのは簡
単でしょうから、余力があればついでに残りもやって頂けたら幸
いです。
以上、こちらの希望する作業順序は了解頂けましたか。返事が遅くなり
ましたことをお詫びします。
堀之内 武 horinout@xxxxxx
京都大学宙空電波科学研究センター 611-0011 宇治市五ヶ庄