RlaB

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 を使うには、

  1. 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/ にコピーします。

  2. /usr/bin/rlab2 を編集して

    PLOT_PROG="gnuplot"
    

    の行を

    PLOT_PROG="plotmtv"
    

    に変更します。

  3. (必須ではありませんが) gnuplot 用のヘルプファイル (一覧) を /usr/share/rlab-2.1.05/doc/help から取り除きます (PlotMTV 用のヘルプは無いので、help plotmtv で直接 plotmtv.r を調べてください)。

PlotMTV 2D PlotMTV 3D

PlotMTV (Plotmtv1.4.1.tar.Z) は ftp://ftp.x.org/contrib/applications/ (あるいは Open Group のミラーサイト) から入手できます。

関連ソフトウェア

その他のアプリケーション

[2001/04/05 作成] [2003/10/17 更新]


このページに関する御意見、御要望を science@mlb.co.jp までお寄せ下さい
Copyright © 2001-2005 Media Lab. All Rights Reserved.