Knoppix/Mathに収められている数式処理/計算機代数システムREDUCEを使ってみる。
次のいずれかの方法で起動する。
- コンソールウィンドウを開き、"reduce"と入力してリターン。
- Math->Reduce を選ぶ。
いずれの場合も、ウィンドウが開き、入力が可能になる。
REDUCEの入力プロンプトは
1:
のようになる。数字は入力毎に増えていく。
- 一行の入力は
$
ないし;
(セミコロン)で完結する。 $
は出力を抑止する。- 入力中は上矢印で過去の入力を呼び出すなどの編集機能が使える。
- 大文字と小文字の区別はない。
bye$
(x + y)**2;
df(ws(1), x);
ws(行番号)
によって既に入力した行を参照できる。(wsは"working space"の略。)
int(1/(x**3-1, x);
つぎのようなことをするときには、入力編集機能を活用するとよい。
int(1/(x**2+1), x);
int(1/(x**2+1), x, 0, 1);
int(1/(x**2+1), x, 0, infinity);
代入は =
などではなく、:=
を使う。
a:=1/2$
b:=1/3$
c:=a+b;
変数としての代入もできる。
p:=s;
s:=12345.67;
p;
f:=sin(3*x)-cos(3*y)*z;
x:=pi/4;
y:=pi/3;
z:=1;
f;
関数の定義もできる。
clear x, y, z;
operator g;
g(x,y,z) := sin(3*x) - cos(3*y) * z;
g(x,y,z);
g(pi/4, pi/3, 1);
"let"コマンドの後は "=" を使う。 "clear"コマンドを実行するとそれまでの定義が消える。(時々やっておかないとはまる。) どちらで定義しても次のように使える。
df(f, x);
df(g(x,y,z), x);
次は何をやっている?
let x**4 = 0;
z := (1 + x + x**2 + x**3)**2;
clear x**4;
matrix aa(2,2), ee(2,2);
ee := mat ( (1,0), (0,1) );
aa := mat ( (a,b), (c,d) );
aa ** 2 - trace(aa) * a + det(aa) * ee;
Maximaでできなかった次の積分はやっぱりできません。
operator f;
f(x):=(cos(a*x) - cos(b*x))/x;
int(f(x), x, 0, inf);