# 10 分でできる (wx)Maxima チュートリアル

wxMaxima へようこそ！ この入門チュートリアルで、wxMaxima と Maxima の基本を学びましょう。
Maxima は、Mathematica、Maple などのシステムに似たCAS （コンピュータ代数システム）です。
でも、Maxima はコマンドラインアプリケーションなので、他のいとこ関係にあるアプリよりも少々
使いにくいところがあります。

ここで、wxMaxima の出番がきます。　wxMaxima は、Maxima を、シンプルで楽しいものするため
にGUI（グラフィカルユーザーインターフェース）版として作らました。

では、簡単な計算例から始めましょう！ 下の入力セルには、簡単な例が入力されています。
その中にカーソルを置いて、Shift-Enterキーを押せば、その計算（評価）結果がでます。

1 + 1;

エラーが発生しなかったら、あなたの Maxima の構成は、適切です。
もし、エラーが発生したら、wxMaxima 構成をチェックしてください。　または、
wxMaxima のWebサイト （http://wxmaxima.sourceforge.net/）にアクセスして、
wxMaximaとMaximaを適切に設定する方法の説明を見てください。

問題を解決できたと思ったら、もう一度計算してみましょう。
（もう一度、カーソルを入力セルに置き、Shift-Enter を押してコードを評価してみてください）。

5!;
% * 10;
%o1 * 100;
1 / 3;
1.0 / 3.0;

上の入力セルでは、5「行」、 Maxima に送ります。　各行の終わりには、";" か、"$" が
必要です。
行末が ";" のときには、Maxima は、その行の結果を示し、行末が"$"のときには、
その行の結果を示しません。"$"は、もっと長い計算をするときに役に立ちます。
あわせて、注意してほしいのは、"1/3" の結果と "1.0/3.0" の結果は違うということです。
その理由は、Maxima が、数値行列計算パッケージ (Matlab 等)と違い、計算の精度を守ろ
うとしているからです―Maxima は、1/3 や sqrt(2) のような式については頼まれなければ、
評価して返答しません。　"1.0/3.0" と書いた場合、浮動小数点数を使用したことになり、
Maxima は、式を評価して返答します。

でも、Maxima　に式の浮動小数点による概数を出すように頼むことができます。
下のセルを評価して、結果を見てみましょう。

sqrt(2 * %pi);
float(%);

"float(%);" の行で使用した "%" の記号は、いつも、そこまでの最終評価結果を
保持しているので、その結果を再利用できます。この記号に "%o1"、"%o2" などと、
番号を付けてやれば、入力セルを評価するときに、その番号の結果を使えます。

数だけでなく、式全体を変数の中に蓄えておくこともできます。"変数名: 値;"の
形式を使用すれば、"変数名"に値 (式自体) が保存されます。

下のセルを評価して結果を見てみましょう。

radius: 10 $
height: 100 $
area: %pi * radius^2;
volume: area * height;

最後の結果を数値として評価してみましょう：

float(%);

ここまででは、Maxima を簡単な電卓としてしか使用していませんでしたが、
次に、電卓では簡単にできない例を試してみましょう。

不定積分と定積分です：

integrate( sin(x), x);
integrate( sin(x), x, 0, %pi);

関数を定義し、それを評価し、積分してみましょう!

f(x) := x^2 + a$
f(5);
f(5), a = -5;
integrate( f(var), var );

時には、Maxima は式を評価する際に追加情報を必要です。そんなときには、質問して
きますから、新しく自動的に現れるカーソルで、その質問に答えてください。セルの下に
返答を書いて、Shift-Enter で Maxima　に送ってください：
 "positive" と答える代わりに、"p" とだけタイプすることもできます。

下の積分の例では、Maxima は、質問してきます。

integrate( 1 / (x^2 + a), x);

前もって Maxima　に、"assume" 関数を使用して情報を与えておくこともでき
ます。　その assume した仮定は、"forget" を使えばもとに戻すこともできます。

(注：　関数の使い方を知りたければ、関数名をクリックし、F1を押すだけです。
やってみてください)

assume(a > 0)$
integrate( 1 / (x^2 + a), x);
forget(a > 0)$

基本的なことはもうわかったはずです。　では、一般的な、数学を試してみましょう。
覚えておいてください：　もし、特定の関数について分からなくなったら、その関数を
クリックしてF1キーを押して下さい。

次の例では solve を使って、方程式を解きます:

solve(a*x^2 + b*x + c = 0, x);

線形代数。　
"matrix"を使えば、行列が作れます。行列に数でない式を含めることもできます。
"invert"を使えば、逆行列も計算できますし、"."　を使えば、行列積も得られます。

A: matrix([1,-1],
          [1,sin(c)]);
B: invert(A);

A.B;
ratsimp(A.B);

直前の行で使用した　"ratsimp" は、"A.B" の結果を整理しています。
Maxima には、式を整理するための関数がいろいろあり、あなたが
どう整理したいかで使いわけられます。式整理は、複雑なので、
それについてあまりわかっていなければ、"ratsimp" がもっともよい
選択になるでしょう。

では次に 2D図と 3D図をプロットしてみましょう。

wxplot2d([sin(x), cos(x)], [x,0, 2*%pi]);
wxplot3d( exp(-x^2 - y^2), [x,-2,2],[y,-2,2]);

続いて、微分を、"diff" 関数でやってみましょう。

f(x) := x^2 $
diff(f(x), x);
g(y) := sin(y)$
g(f(x));
diff( g(f(x)) , x);

そうなんです。 Maxima は、連鎖律がわかっています。

最後に、次の、二次のODE (常微分方程式) を解いてみましょう。
y''(t) + omega^2 * y(t) = 0

assume(omega > 0);
ode2( 'diff(y, t, 2) + omega^2 * y = 0, y, t );

ic2(%, t = 0, y = amp, 'diff(y,t) = 0 );

もう、あなたは自分で、(wx)Maxima の探索を始めることができます。忘れないで、 
F1を時々押してください。Maxima に自分の数学上の問題を解決するのを手伝って
ほしいなら。

では、楽しんで、Maxima と wxMaxima を使いましょう。