Ruby-LAPACK は, LAPACK の Ruby ラッパーです。
latest version is 1.8.2 [05 Nov 2021]
# gem install ruby-lapack
ruby-lapack-1.8.2.tar.gz
git リポジトリからも取得することができます
% git clone http://ruby.gfd-dennou.org/products/ruby-lapack/ruby-lapack.git
Ruby-LAPACK を利用するためには, numru/lapack を require する必要があります。
require 'numru/lapack'それぞれのサブルーチン・関数は NumRu::Lapack のモジュールメソッドとして定義されています。
returns = NumRu::Lapack.method_name(args)
NumRu::Lapack.method_name(:help => true) NumRu::Lapack.method_name(:usage => true)
個々のメソッドのドキュメントは、 ここ にあります。
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 の長さである。