[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:002995] Re: Ruby-Lapack
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:002995] Re: Ruby-Lapack
- From: "Seiya Nishizawa" <seiya@xxxxxxxxxxxxxx>
- Date: Thu, 9 Oct 2008 17:03:29 +0900
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:sender :to:subject:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references :x-google-sender-auth; bh=dbJBVipw83Cl9u5b9DE7vXokXOxi0rL6ZV7XnrQO8cI=; b=rudZzGoRcYyu3iGtXsN6qzLGpIGXTECnqKLyB+bkEhxUk9fl4Oiv1QA2HtG6jwWehL e272Op1N18qMUXUkZk0q82wJbDto6a9S36EUIc6lfJohGEaYEs48BzAvCdXKiKJXawN8 cEEob8MzUox5XU/o1uBo3jCi0+aJ+kIXJIFRA=
- Sender: seiyani@xxxxxxxxx
西澤です
ちょっと linalg を見てみました。
使いたいサブルーチンである dsyevr (倍精度対象行列の固有値固有ベクトル計算。必要な固有値固有ベクトルのみ計算する)を例にします。
* 新しく作った Ruby-LAPACK
require "numru/lapack"
a = NArray[[1,2],[2,3]]
m, w, z, isuppz, work, iwork, info, a = NumRu::Lapack.dsyevr("V", "I",
"U", a, nil, nil, 1, 2, 0.0, 52, 20)
* Linalg
require "linalg"
include Linalg::XData
jobz = Char.new("N")
range = Char.new("A")
uplo = Char.new("U")
n = XInteger.new(na.shape[0])
a = DMatrix[[1,2],[2,3]]
lda = XInteger.new(n.value)
vl = DReal.new
vu = DReal.new
il = XInteger.new
iu = XInteger.new
abstol = DReal.new(0.0)
m = XInteger.new
w = DMatrix.reserve(n.value,1)
v = DMatrix.reserve(n.value,n.value)
ldz = XInteger.new(n.value)
isuppz = IData.new(2*n.value)
lwork = XInteger.new(52)
work = DReal.new(lwork.value)
liwork = XInteger.new(20)
iwork = IData.new(liwork.value)
info = XInteger.new
Linalg::Lapack.dsyevr(jobz, range, uplo, n, a, lda, vl, vu, il, iu,
abstol, m, w, v, ldz, isuppz, work, lwork, iwork, liwork, info)
現時点では、narray から DMatirx への変換が必要で、ループで値を代入するか、マーシャルダンプを利用するかです。
NArray#to_doublereal_ptr メソッドを作れば narray をそのまま使えると思います。
これで Linalg版 dsyevr が実行できるはず、と思って実行してみたところ、
`dsyevr': too many arguments (21) (ArgumentError)
とのエラーが ^^;
ruby のソースを眺めてみると、なんと引数の最大値は15みたいです。
2008/10/6 Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>:
> 堀之内です。
>
> 西澤さん、すみません、「LAPACK や BLAS のラッパ」を探すのを忘れて
> ました。RAAで探したら次がでてきました。
> http://raa.ruby-lang.org/project/linalg/
> 見覚えがあるので、これでしょう。本体は、
> http://linalg.rubyforge.org/
> にあります。ちゃんとメンテされてるようです。
>
> NArrayは使わないようになってるんですかね。
> もしよければ、今回作ったのと仕様を比較して
> もらえませんか?
>
> # るびきちさんが作ってた気がするというのは
> やはり勘違いだったようです。
>
> 皆様: 異動しました。(何度も目にしてる方すみません)
>
>> 西澤です
>>
>> Ruby-Lapack をリリースしました。
>> http://www.gfd-dennou.org/arch/ruby/products/ruby-lapack/index.html
>>
>> (ほぼ)すべてのサブルーチン、ファンクションをパックしてあります。
>> ただし、ほとんどテストしていませんので、いろいろ動かないものがあるかもしれません。
>>
>> 単なる1:1ラッパーであり、
>> 行列などのクラスを作ったりはしていません。
>> 行列はNArrayとして引数に与えます。
>>
>> 引数なしで呼び出すと、ヘルプメッセージがプリントされます。
>>
>>
>> --
>> Seiya Nishizawa
>> Department of Earth and Planetary Atmospheric Sciences, Kobe University
>
> 堀之内 武
> 北海道大学 地球環境科学研究院 地球圏科学部門
> 〒060-0810 札幌市北区北10条西5丁目
>
>
>
--
Seiya Nishizawa
Department of Earth and Planetary Atmospheric Sciences, Kobe University