MathLibreに収められている数式処理/計算機代数システムMaximaを使ってみる。 自分でインストールするのは、LISPの選択から始めなければならずそれなりに面倒だが、すぐに動かせる形となっているMathLibreは大変ありがたい。
次のいずれかの方法で起動する。
- ターミナル(左下にあるこれ です)を開き、"maxima"と入力してリターン。最も基本的なもの。
- Math->Maxima Algebra System を選ぶ。xmaxima. GUI付き。チュートリアルも表示される。(VirtualBoxで画面サイズが小さいとあまりうれしくないようだ。)
- Math->wxMaxima を選ぶ。wxMaxima. GUI付き。基本的なコマンドや操作がメニューになっている。出力結果を見やすくフォーマットしてくれる。
Math->GNU TeXmacsでTeXmacsを起動し、メニューバーから挿入->セッション->Maxima を選ぶ。出力結果を見やすくフォーマットしてくれる。
以下の操作ではターミナル版を想定している。他の場合は編集機能や実行時の操作がやや異なることがあるので、それぞれの画面に表示されるガイドを参照すること。
Maximaの入力プロンプトは
(%i1)
のようになる。数字は入力ごとに増えていく。一行の入力は ;
(セミコロン)で完結する。
入力中は上矢印で過去の入力を呼び出すなどの編集機能が使える。
quit();
(x + y)^2;
diff(%, x);
直前の出力(一つ前のコマンドの実行結果)は %
で参照できる。
もっと古い実行結果 %o3
を参照したければ %o3
とする。
integrate(1/(x^3-1), x);
つぎのようなことをするときには、入力編集機能を活用するとよい。
integrate(1/(x^2+1), x);
integrate(1/(x^2+1), x, 0, 1);
integrate(1/(x^2+1), x, 0, inf);
代入は =
などではなく、:
(コロン)を使う。
a:1/2;
b:1/3$
$
で行を終始すると表示を抑制できる。
c:a+b;
変数としての代入もできる。
p:s;
s:12345.67;
p;
変数 p
にではなく、 p
の値(今の場合 s
)に代入するには ::
を使う。
p::a-b;
s;
p
の値は変わっていない(s
のまま)ことを確認せよ。
values;
で今まで使った変数の一覧を得ることができる。
? keyword
describe(command);
でkeywordに関連するコマンドの一覧が出る。
example(command);
はcommandの使い方の例。
ev()
関数を使って評価することができる。
f:sin(3*x)-cos(3*y)*z;
ev(f, x=%pi/4);
ev(%, y=%pi/3);
ev(%, z=1);
一度にやってもよい。
ev(f, x=%pi/4, y=%pi/3, z=1);
関数の定義もできる。
g(x,y,z) := sin(3*x) - cos(3*y) * z;
g(%pi/4, %pi/3, z);
どちらで定義しても次のように使える。
diff(f, x);
diff(g(x,y,z), x);
quotient(19, 5);
remainder(19, 5);
divide(19, 5);
11!;
factor(11!);
sum(n^2, n, 1, 10);
r0:x^8+x^6-3*x^4-3*x^3+8*x^2+2*x-5;
r1:3*x^6+5*x^4-4*x^2-9*x+21;
quotient(r0, r1, x);
remainder(r0, r1, x);
divide(r0, r1, x);
展開など。
r0*r1;
expand(%);
diff(%, x, 14);
%/14!;
integrate(r0, x);
integrate(r0, x, 0, 1);
式を整理するには ratsimp()
, factor()
, trigsimp()
(三角関数を含む場合)などを使う。
2*x^2+4*x^3+x^4-2*x^5-x^6;
factor(%);
1/(x+1) + x^2/(x^2-1);
ratsimp(%);
solve(x^2+2*x+1 = 0, x);
(" = 0
"はなくても同じ意味に解釈される。)
連立方程式も。
eq1:[x^2+y*x-1, x*y^2-x+y];
algsys(eq1, [x,y]);
その他にも、行列計算、微分方程式、グラフ表示などいろいろできる。 Webでかなり情報が得られるようにもなってきているので、各自調べてみてください。
できないこともあります。
f:(cos(a*x) - cos(b*x))/x;
assume(a > 0, b > 0);
integrate(f, x, 0, inf);
この積分値は log (b/a)
になるはずです。
余裕のあるひとは
にすすんでください.
例題のいくつかは
- 横田博史、『はじめてのMaxima』(工学社、2006)
- 渡辺隼郎、「Macsymaの使い方」、archive No. 12, 「数式処理 入門から高度利用まで」(CQ出版社、1990)所収
から引用しました。