[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 宇治市五ヶ庄