Algae は数値解析のためのインタプリタ言語です。 行列演算は Octave よりも高速で、特に疎な行列に対して高速化が計られているようです。 シンタックスは MATLAB や Octave よりも RlaB に似ています。 グラフ表示は gnuplot を利用します。
作者: Scott Hunziker さん、
Mike Brennan さん
ホームページ:
http://algae.sourceforge.net/
バージョン: 4.3.6 (2004/02/22)
ライセンス: GPL
README を読む
付属ドキュメント
User's Manual を読む
Algae は以前は Alki という名で知られていました。
インストールしたら、早速使ってみましょう。 起動はターミナルから algae と入力します。
$ algae >
終了は exit() を入力します。 (コマンドラインオプション等は man algae を参照してください。)
コマンドライン入力には readline ライブラリが使われているので bash などと同じようにカーソルキーで前の入力を呼び出したり、入力行の編集ができます。
help と入力すると短いへルプが出ます。
> help
"
This is Algae, an interpreted language for numerical analysis.
EXITING: To exit Algae, type `exit()'.
INFO: The manual is available on-line through the `info' function. Type
`info()' to view it or `info("abs")', for example, to go to a
description of the `abs' function.
READLINE: Command line editing and history is available on most systems.
The arrow keys on your keyboard allow basic editing -- more
sophisticated commands are also available.
SOURCE: Algae is free software. See the documentation for license,
warranty, and permission details.
"
Algae の文法は C に似ています。
> printf("hello, world\n");
hello, world
式の最後の ";" を付けなければ式の値が表示されます。
> a=1+2*3
7
変数名は(数字で始まらない)英字、数字、ドル“$”
またはアンダスコア“_”の列です。大文字、小文字は区別されます。
長さの制限は(1以上という点を除いて)ありません。
先頭が“$”の名前はいくつか内部で使われるので避けたほうがいいでしょう。
例えば、$beep を 0
以外にセットするとエラー発生時にベルが鳴ります。
式に ";" を付けないときの)表示の精度はデフォルトでは 4 桁ですが、関数
digits() で変更できます。
> digits(20)
20
> atan(1)*4
3.1415926535897931160
digits()
の引数を省略すると現在の設定を返すのみで設定は行ないません。
虚数単位を表す記法や変数は用意されていないので、 必要なら例えば次のように自分で定義して使います。
> i = sqrt(-1)
0.000 + 1.000*i
> (1 + 2*i)^2
-3.000 + 4.000*i
変数名の一覧は who()
で得られます。関数の一覧は what()です。
> who()
a help i
うむ、help というのは変数だったんですね。
個々の変数について調べるのは show() です。
> show(help);
class: scalar
type: character
NULL
変数には class, type などの属性があります。これらを調べるには
> a.class
"scalar"
のようにします。
タイプは integer、real、complex、character の4つです。
クラスには、scalar、vector、matrix、table、function が
あります。table は C の構造体のようなもので、
どのクラスも table のメンバーにすることができます。
table の作成とメンバーの参照は次のようにします。
> T = {x = 1; y = "one"}
x y
> T.y
"one"
Algae の文法は C によく似ていますが、大きく違うのは次の点です。
x = 1, 2, 3;
printf("x = %d\n"; T.x);
x = 1
さて、準備ができたところで行列の演算をやってみましょう。
行列の入力は次のようにします。
> 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 ]
全要素がゼロの行列は zero() で作れます。
> Z = zero(2,3)
[ . . . ]
[ . . . ]
"." で表示されるのは sparse の意味で、要素の値を求めれば 0 が返ります。
行列の演算は +、-、/ は要素同士の演算になります。
> A / B
[ 0.2500 0.3333 0.6000 ]
[ 4.000 1.667 3.000 ]
行列の乗算は * でできます (* は vetor 同士なら内積を返します)。
2 × 3 の行列同士では積は定義されませんから B を
転置して掛けてみましょう。
転置 (複素数なら共役) の演算子は シングルクォート ' です。
> B'
[ 4 1 ]
[ 6 3 ]
[ 5 2 ]
> A * B'
[ 31 13 ]
[ 76 31 ]
演算子 @ では要素ごとの積になります。
sin() とか、スカラーとの演算は要素ごとに計算されます。
連立方程式
11x + 3y = 1, 2x + y = 0
を解くには次のようにします。
> A = [11, 3; 2, 1];
> b = [1; 0];
> solve(A;b)
[ 0.2000 ]
[ -0.4000 ]
同じ係数行列を使って何度も解く場合は次のようにすると効率的です。
> A = [11, 3; 2, 1];
> C = factor(A);
> b = [1; 0];
> solve(C;b)
[ 0.2000 ]
[ -0.4000 ]
factor() は IPIV, LU, RCOND をメンバーとする table を返します。
この table を solve() に与えると後退代入のみ行なうように
なっているので、毎回元の行列から計算するのに比べるとタダ同然の時間で
計算できます。
実際の solve() は /usr/share/algae/4.3.6/tools/solve.A で次のように
なっています。
solve = function (A; b; options)
{
if (class(A) != "table")
{
if (options != NULL && members (options) == "pos")
{
A = chol (A);
else
A = factor (A);
}
}
return backsub (A; b);
};
クラスが vector や matrix の場合、class、type 以外にもいくつか 属性が付いています。
> show(A);
class: matrix
type: integer
nr, nc: 2, 2
rid, cid: NULL, NULL
symmetry: general
density: dense
nn: 4
nr, nc は行と列の数です。
rid, cid は、行と列の名前 (id) です。
最新バージョンの RPM パッケージは
SourceForge のプロジェクトページ
から入手できます。
LinuxMLD 7
では依存するパッケージとして libf2c および
gnuplot
を追加インストールする必要があります。
残念ながら、MLD 5,6 でインストールできる RPM パッケージは配布されていません。
rpm コマンドでインストールするには、スーパーユーザになって
# rpm -i algae-4.3.6-1.i386.rpm
とします。
上記の RPM では、HTML のブラウザとして mozilla が設定されています。
変更するには /usr/lib/algae/4.3.6/algae.A の
xhtml =
の行を探して修正してください。
gnuplot が /usr/bin/gnuplot 以外の場合も
gnuplot = の行を探して修正してください。
HTML ブラウザが見つからないときは info コマンドが起動されます。
類似のアプリケーションについては Octave のページを参照してください。