RlaB (ouR lab) は行列演算を中心とする数値計算用インタプリタ言語です。 商用ソフト Matlab と同じような機能を、より合理的なシンタックスで実現しています。 グラフ表示は gnuplot を利用します。
作者: Ian R. Searle さん他
ホームページ:
http://rlab.sourceforge.net/
バージョン: 2.1.05 (1999/12/18)
ライセンス: GPL
付属ドキュメント
Rlab2 Reference Manual を読む
RlaB は Matlab と似た機能を持っていますが Matlab clone を目標にしているわけではありません。 リファレンスマニュアルには次のように書かれています。
Rlab does not try to be a Matlab clone. Instead, it borrows what I believe are the best features of the Matlab language and provides improved language syntax and semantics.
シンタックスは Matlab と異なることが多いので、Matlab の代わりとして使いたい人は Octave の方が良いでしょう。 Matlab にこだわらない人は RlaB を試してみるのをお勧めします。 RlaB は Octave よりコンパクト (Octave の約 15MB に対して RlaB は 3.4MB しかディスクを占領しません) で、記法もスマートです。
インストールしたら、早速使ってみましょう。 起動はターミナルから “rlab2” と入力します。
$ rlab2 Welcome to RLaB. New users type `help INTRO' RLaB version 2.1.05 Copyright (C) 1992-97 Ian Searle RLaB comes with ABSOLUTELY NO WARRANTY; for details type `help warranty' This is free software, and you are welcome to redistribute it under certain conditions; type `help conditions' for details >
終了は “quit” あるいは control-D を入力します (コマンドラインオプション等は man rlab2 を参照してください)。
まずは Welcome メッセージのお勧めに従って help INTRO してみてください。 ただし内容が若干古いようで、細部は現状と異なっていることがあります。 単に help とすればすべてのトピックの一覧が得られます。
コマンドライン入力には readline ライブラリが使われているので bash などと同じようにカーソルキーで前の入力を呼び出したり、 入力行の編集ができます。
計算式や変数の代入の書き方は C に似ています。
> a=1+2*3 7
RlaB は数値計算用ですからビット演算はありません。^
は冪乗の意味になります。>>
や <<
は別の意味 (リスト: 後述) になります。
++
、--
は後置のみ可能です。
+=
とか三項演算子はありません。
コメントは #
(shell 風)、
//
(C++ 風)、%
(Matlab 風) が使えます。
式の終りにセミコロン ;
を付けると結果を表示しません。
> a = sqrt(2); >
変数名は英字で始まる、英数字の列です。アンダスコア“_”は
英字に含まれますが、先頭がアンダスコアの名前は内部で使われるので
避けたほうがいいでしょう。
大文字、小文字は区別されます。
長さの制限は特に記載がないですが、表示等で 15 文字程度と期待している
ようであり、120 を越えるあたりで異常終了したりします。
整数とか実数 (とか複素数とか文字列とか行列とか) の
型の宣言は必要ありません。数値はすべて倍精度実数として扱われます。
> 1/7 0.143
あらかじめ定義されている変数としては pi
(円周率)、
eps
(マシン・イプシロン) があります
(これらはスタートアップスクリプト
/usr/share/rlab2/.rlab
で計算されます)。
表示の精度はデフォルトでは 3 桁ですが、関数 format()
で変更できます。
> format(7) 9 3 > eps 2.220446e-16
format()
のシンタックスは
format([WIDTH,] PRECISION)
で、実行すると
直前の設定を返します。PRECISION も省略するとデフォルト設定に戻します。
複素数、文字列の記述は次のようにします。
> b = 1 + 2i; ← 2 と i の間をあけてはいけない > c = "Hello";
虚数を示す i
は j
も使えます。
変数 i
は定義されていませんが、必要なら次のように自分で
定義します。
> i = 1i 0 + 1i
もちろん次のようにしても構いません。
> i = sqrt(-1) 0 + 1i
変数名の一覧は who()
あるいは whos()
で得られます。関数の一覧は what()
です。
> who() _rlab_config b eps pi a c i > whos(); Name Class Type Size NBytes _rlab_config list 8 73 a num real 1 1 8 b num complex 1 1 16 c string string 1 1 9 eps num real 1 1 8 i num complex 1 1 16 pi num real 1 1 8 Total MBytes = 0.328538
変数には class, type, size などの属性があります。これらを個別に
調べるには class()
などの関数を使います。
> class(b) num
変数のクラスには、数値(num)、文字列(string) の他、関数、リストが あります。どのクラスもリストのメンバーにすることができます。 リストの生成、参照は次のようにします。
> L = << 4; "April" >> 1 2 > L.[2] April
リストのメンバーを番号ではなく名前で生成することもできます。
> L2 = << month=4; name="April" >> month name > L2.["name"] April
名前によるメンバーの参照は L2.name
のように略記することが
できます。
クラスがリストでない変数も、実装はクラスと同じで、属性をメンバーに持っています。
またすべてのグローバルな変数、関数は
global workspace $$
のメンバーです。
変数や関数を消去するのは “clear(名前)
”です。「名前」は“,”で
区切って複数指定もできます。すべての変数を消去するのは clearall() です
(pi
、eps
などは消去されないようになっています)。
そのほか、show()
、members()
などを
help
で調べてください。
さて、準備ができたところで行列の演算をやってみましょう。
行列の入力は次のようにします。
> A = [1,2,3;4,5,6] 1 2 3 4 5 6
列の区切りは カンマ ,
行の区切りは セミコロン ;
です。
各要素は A[2;3]
のようにして (数学の記法と同じで行が先) 参照したり
代入したりできます。文字列の行列も作れます。
部分行列の参照は A[1:2;2:3]
のようにします。
記法「n:m
」は n から m までの要素を持つベクトルを生成します。
n:m:k
とすると増分が k
になります。
A[1,2;1,3]
は「行の 1 と 2、列の 1 と 3」の意味になります。
行あるいは列の要素順は任意です。
> B = A[2,1;1,3,2] 4 6 5 1 3 2
単位行列は eye()
、全要素がゼロの行列は zeros()
で作れます。
いきなり C[2]=1
とかすると C
は行ベクトルになります。
行列演算は (数学的に意味がある限り) スカラーの演算と同じように行なえます。
> A + B 5 8 8 5 8 8
2 × 3 の行列同士では積は定義されませんから B
を
転置して掛けてみましょう。
転置 (複素数なら共役) の演算子は シングルクォート '
です。
> B' 4 1 6 3 5 2 > A * B' 31 13 76 31
演算子 .*
では要素ごとの積になります。
.+
、.-
、./
なども同様です。
sin()
とか、スカラーとの演算は要素ごとに計算されます。
> A .* B 4 12 15 4 15 12
連立方程式
11x + 3y = 1, 2x + y = 0
を解くには次のようにします。
> A = [11, 3; 2, 1]; > b = [1; 0]; > A\b 0.2 -0.4
演算子 \
(バックスラッシュですが¥に見えるかも) は、
A\b
で「b を左から A で割る」イメージです。
つまり A-1b ですが
RlaB の中では逆行列を経由しているわけではありません。
連立方程式を解くのに逆行列を使うのは手間がかかる上に精度が悪いと言うのは
数値計算の常識となっています。逆行列は inv()
で求められます。
固有値を求める関数は eig()
です。
> A=[1,2;2,1]; > eig(A) val vec > eig(A).val -1 3 > eig(A).vec -0.7071068 0.7071068 0.7071068 0.7071068
eig() は固有値と固有ベクトルをリストで返します。
最後にグラフ表示してみましょう。
簡単な X-Y グラフを書く関数は plot()
ですが
gnuplot が必要です。
正弦関数と余弦関数を [-3, 3] の範囲で描いてみましょう。
まず x の列ベクトルを用意します。
> x = (-3:3:0.1)';
これで -3 から 3 まで 0.1 きざみの列ベクトルができます。転置しているのは
単に -3:3:0.1
だと行ベクトルになるからです。
つぎに、x
と sin(x)
、
cos(x)
を並べた行列を作ります。
> v = [x,sin(x),cos(x)]; > plot(v);
これで次のようなグラフが出ます。グラフのウィンドウを閉じるには そのウィンドウにマウスカーソルを置いて q を押します。
グラフのプロットについてさらに詳しくは help gnuplot を参照 してください。
そのほかの応用は、
線形代数は solve, qr, rcond, chol, factor, schur など 常微分方程式は ode 最小自乗法は svd (特異値分解), nlleastsq 数値積分は quadr 非線形方程式は fsolve 最適化は optimum
など、help あるいはリファレンス・マニュアルでそれぞれの関数について 調べてください。
デフォルトではビルトイン関数のほかは /usr/share/rlab2/
の
サブディレクトリ rlib
にある *.r
で記述された関数が起動時に読み込まれています。
help
ではそのほかに
toolbox
、
controls-toolbox
、
examples
の各ディレクトリにある関数も出て来ます
(環境変数 RLAB2_PATH
によります)
が、これらを実際に使うには rfile コマンドで
読み込む必要があります。例えば、toolbox
にある
mean
を使うには、rfile mean を実行します。
すると toolbox/mean.r
の内容を入力したかのように
work space に読み込まれます。
help と rfile はコマンドなので括弧は不要です。
help では quit 以外の制御ステートメントなど
プログラミングに関する情報は出て来ません。リファレンスマニュアルを参照してください。
リファレンスマニュアルは HTML 形式のものが
/usr/share/doc/rlab-2.1.05/doc/html
にあります。
また PostScript 形式 (約 150 ページ) は
/usr/share/doc/rlab-2.1.05/doc/rlab-ref.ps
です。
LinuxMLD 5,6,7 用の RPM rlab-2.1.05-1_mlb1.i386.rpm (1,181,785 bytes) をインストールします。
※ LinuxMLD 7 では先に DVD-ROM から readline41-4.1-16 を追加インストールしてください。
rpm コマンドでインストールするにはスーパーユーザになって
# rpm -i rlab-2.1.05-1_mlb1.i386.rpm
とします。
MLD 5,6 では
Gnome の GUI でインストールすることもできます。
コマンド rlab2 (/usr/bin/rlab2
)
はシェルスクリプトで、/usr/bin/rlab-2.1.05
の実行に必要な環境変数の定義などをしています。
環境変数の説明は man page にありますが、rlab2 を実行する限り
RLAB2_PATH
以外の環境変数は再定義されてしまいますから
注意してください。
ヘルプにある RLAB_SEARCH_PATH
は
バージョン1にはありましたが、現在は使われていません。
ここで御紹介したパッケージではプロットに gnuplotを使うようにして いますが、RlaB は他のプロットプログラムを使うこともできます。 PGPLOT、 PLplot および Pgraf はビルド時に指定する必要がありますが、 gnuplot と PlotMTV は設定で切替えて使用することができます。
examples
のプロット関係のファイル (例えば plot_test.r) では
PLplot 用の関数が使われている部分があるので注意してください。
gnuplot の代わりに PlotMTV を使うには、
PlotMTV をインストールして
/usr/share/rlab-2.1.05/rlib/plot.r /usr/share/rlab-2.1.05/rlib/gp-compat.r
を取り除き、代わりに /usr/share/doc/rlab-2.1.05/misc/plotmtv.r
を /usr/share/rlab-2.1.05/rlib/
にコピーします。
/usr/bin/rlab2
を編集して
PLOT_PROG="gnuplot"
の行を
PLOT_PROG="plotmtv"
に変更します。
(必須ではありませんが) gnuplot 用のヘルプファイル
(一覧) を
/usr/share/rlab-2.1.05/doc/help
から取り除きます
(PlotMTV 用のヘルプは無いので、help plotmtv
で直接
plotmtv.r を調べてください)。
PlotMTV (Plotmtv1.4.1.tar.Z) は ftp://ftp.x.org/contrib/applications/ (あるいは Open Group のミラーサイト) から入手できます。
関連ソフトウェア
その他のアプリケーション