[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:002111] Re: チュー トリアル
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002111] Re: チュー トリアル
- From: Yoshiki Tsunesada <y.tsunesada@xxxxxxxxx>
- Date: Sun, 6 Feb 2005 21:48:20 +0900
- Organization: National Astronomical Observatory of Japan
堀之内様、皆様
常定@天文台です。
> NArrayサポートが増えたのは大変喜ばしいです。ところで、つい最近補
> 間の必要があってGSLについてちょっと調べました。補間に使う元デー
> タは当然配列的なデータになりますが、私が見落としてなければ、補間
> 先の指定に関しては、GSLでは一点のみ指定する関数があるだけのよう
> です(つまり1コールで1点分の補間を行う)。
おっしゃる通りです。
# GSLでは、「ワンステップ」計算のルーチンは豊富にあるのですが、
# 計算を進めて行く「ドライバ」的ルーチンは、ODE以外には
# あまりありません。
> 用に耐えないケースがでます。それに対処するには、GSLの関数そのま
> まのRubyインターフェースでなく、C でループを回す関数を作り、それ
> に対する Ruby インターフェースを使う必要があります。補間の場合で
> 言えば、補間先の指定を NArray で受け付け、その各要素に対してルー
> プを回せばいいので、やることは単純です。
> このように大量データの処理という観点から、CでGSLの応用関数を書い
> た上で Ruby インターフェースを作られる計画はお持ちでしょうか。
> (..そうなればいいな、と思ってます。有り体に言えば。。。 (^^;) )
実は、現状でそれが可能です(ドキュメントに書いとくべきでしたね。付属
のサンプルスクリプトでもそれを使っていませんし)。補完した値を計算す
るメソッド Interp#eval(x),Spline#eval(x) は、x として
Numeric、GSL::Vector, GSL::Matrix,それに NArray を取る
ことができ、内部でループを回して、x と同じクラスのオブジェクトとして
返します。例えば以下のようなスクリプトが書けます。
#!/usr/bin/env ruby
require("gsl")
# データファイルを読んでベクトルを作る
x, y = Vector.filescan("data.dat")
# Splineオブジェクト生成
sp = Spline.alloc(x, y)
# a: 補完したい点の集合, linspace はMatlab/Octaveから
# 拝借したもので、GSLには対応する関数なし
a = Vector.linspace(x[0], x[-1], 100)
# b: 補完された値の集合
b = sp.eval(a) # b は GSL::Vector, len=100
x, y, a はNArray でもよく、例えば a -> a.to_na と
してもそのまま動きます。この場合、b も NArray になります。
その他、ベクトルを渡してループを回したくなるようなメソッドは、
(思いつく限り)それができるようにしてあります。GSL::Vector,
GSL::Matrixに関しては以前のバージョンからできるようになって
いたのですが、今回のバージョンアップは、さらに(いちいちto_gv
しなくとも直接) NArray も受け取れるようにした、ということです。
(いじめてみて、できないメソッドがあったらリクエストしていただけ
るとありがたいです)
dlというのは、知らなかったですね、、、何するものなんでしょう?
-------------------------------------
常定 芳基 Yoshiki TSUNESADA
国立天文台 重力波プロジェクト室
181-8588 東京都三鷹市大沢2−21−1
TEL: 0422-34-3625