GFD Dennou Club / Dennou Ruby / Products
English version is here.

Ruby-LAPACK

- a Ruby wrapper of LAPACK -



What's Ruby-LAPACK

Ruby-LAPACK は, LAPACK の Ruby ラッパーです。


Downloads

latest version is 1.8.2 [05 Nov 2021]

gem

# gem install ruby-lapack

source files

ruby-lapack-1.8.2.tar.gz
git リポジトリからも取得することができます

% git clone http://ruby.gfd-dennou.org/products/ruby-lapack/ruby-lapack.git


Requires


Usage

Ruby-LAPACK を利用するためには, numru/lapack を require する必要があります。

require 'numru/lapack'
それぞれのサブルーチン・関数は NumRu::Lapack のモジュールメソッドとして定義されています。
returns = NumRu::Lapack.method_name(args)
配列(行列)は, NArray で与えます。 配列次元の順番は、0次元目が行、1次元目が列です: x_ij => x[i-1,j-1]。
引数に :help=>true や :usage=>true をつけて呼び出すと、ヘルプや使用方法のメッセージが表示されます。
NumRu::Lapack.method_name(:help => true)
NumRu::Lapack.method_name(:usage => true)


Documents

個々のメソッドのドキュメントは、 ここ にあります。


Example

DSYEVR: 実対称行列の指定された条件を満たす固有値、固有ベクトルを求める。
以下のスクリプトは、 行列(x_11 = 1, x_12 = x_21 = 2, x_22 = 3)の最大固有値およびその固有ベクトルを求める。
Ruby メソッドは NumRu::Lapack.dsyevr である。

jobz = "V"
range = "I"
uplo = "U"
a = NArray[[1,2],[2,3]]
vl =  vu = 0 # not be used in this example
il = 1
iu = 2
abstol = 0.0

m, w, z, isuppz, work, iwork, info, a = NumRu::Lapack.dsyevr(jobz, range, uplo, 
a, vl, vu, il, iu, abstol)
対応する FORTRAN subroutine は DSYEVR である。
SUBROUTINE DSYEVR(JOBZ, RANGE, UPLO, N, A, LDA, VL, IL, IU, ABSTOL, M, W, Z, LDZ
, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)
# JOBZ(input), RANGE(input), UPLO(input)
# N(input), A(input/output), LDA(input)
# VL(input), IL(input), IU(input), ABSTOL(input)
# M(output), W(output), Z(output), LDZ(input), ISUPPZ(output)
# WORK(workspace/output), LWORK(input), IWORK(workspace/output), LIWORK(input)
# INFO(output)
N は行列A のオーダー, LDA は配列A の最初の次元長、 そして、LDZ は配列Z の最初の次元長、LWORK は配列WORK の長さ、LIWORK は配列IWORK の長さである。