ホーム‎ > ‎

Maxima入門

はじめに

MathLibreに収められている数式処理/計算機代数システムMaximaを使ってみる。
自分でインストールするのは、LISPの選択から始めなければならずそれなりに面倒だが、すぐに動かせる形となっているMathLibreは大変ありがたい。

起動

次のいずれかの方法で起動する。
  1. ターミナル(左下にあるこれ
    です)を開き、"maxima"と入力してリターン。最も基本的なもの。
  2. Math->Maxima Algebra System を選ぶ。xmaxima. GUI付き。チュートリアルも表示される。(VirtualBoxで画面サイズが小さいとあまりうれしくないようだ。)
  3. Math->wxMaxima を選ぶ。wxMaxima.  GUI付き。基本的なコマンドや操作がメニューになっている。出力結果を見やすくフォーマットしてくれる。
  4. 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;
で今まで使った変数の一覧を得ることができる。

Help

? 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)所収

から引用しました。

Comments