Maxima

Maxima（マキシマ）は、LISP で記述された数式処理システムである。GNU GPL に基づくフリーソフトウェアであり、現在も活発に開発が続けられている。Maple や Mathematica などの商用の数式処理システムと比べても遜色のない機能を持っている。
略史.
Maxima の起源は、マサチューセッツ工科大学の MACプロジェクトによって開発され、米国エネルギー省（DOE）によって配布されていたDOE Macsyma の1982年のバージョンを GNU Common Lisp に移植したものである。
1982年から Macsyma の独自のバージョンを管理・維持していたビル・シェルター () が、1998年にエネルギー省から GPLライセンスを適用することを条件に公開の許可を得た。
こうして公開されたプログラムは 「Maxima」（マキシマ）と呼ばれるようになった。
2001年のシェルターの死後、「Maxima」（マキシマ）は開発者や利用者のグループによって、現在でも独自に開発が続けられている。
実装.
上述のように、Maxima は GNU Common Lisp への移植から開発が始まったが、その後 CLISP やCMU Common Lisp (CMUCL) でも動作するように改良されている。V5.9 以降は、CLISP や CMUCL が標準になっている。
Maxima は、文法的には ALGOL に、意味的には Lisp にそれぞれ類似のプログラム言語を備えており、プログラミングや計算機代数の教育用としても使えるようになっている。
またMaxima は、他の数式処理システムと同様に高度な記号処理機能を備えており、有理数や多倍長整数、多倍長浮動小数点の演算を可能にしている。浮動小数点数や配列の処理をより効率の良い FORTRAN などで処理するためのプログラム書き出しもサポートされている。
Maxima をグラフィカルユーザーインターフェースから操作するためのフロントエンドとして、 と Emacs の発想を受け継いだGNU macs、wxWidgets に基づいた wxMaxima、Emacs 用のパッケージ imaxima などがある。
使用法.
コマンド処理、バッチ処理によるプログラムが可能である。
表記法（入力規則）
 コメント
 C言語のコメントと同じ
 /*コメント行*/
 実行
 結果を表示する場合は式の最後に ; を入れて改行する。
 式;
 結果を非表示にする場合は$を入れて改行する。
 式$
 代入
 変数:代入式;
 関数(変数):=代入式;
 ev(式,変数=数式);
 n次解(リストで表示)
 [解[1],解[2]...]
演算（加減乗除, 関数）
 + 加算
 - 減算
 * 乗算
 / 除算
 ** べき乗
 ^ べき乗
 () 括弧内の処理を優先させる。
 sin()
 cos()
 tan()
 …他にも様々な関数があります。
抽出
 分数
 ratsimp(有理式); 通分する
 num(分子/分母); 分子を取り出す
 denom(分子/分母); 分母を取り出す
 右辺、左辺
 rhs(左辺=右辺); 右辺を取り出す。
 lhs(左辺=右辺); 左辺を取り出す。
多項式
 expand(多項式); 展開
 factor(多項式); 因数分解
 taylor(関数,変数,展開中心,近似次数); テーラー展開
解法
 solve([方程式リスト],[変数リスト]); 方程式を解く
 limit(関数,変数,近づける値); 極限値
 diff(関数,変数,階数); 微分
 integrate(関数,変数,開始値,終了値); 積分
 sum(関数,添え字変数,初期値,終値); 総和を求める ΣAi = A0+A1+...+An
 product(関数,添え字変数,初期値,終値); 総積を求める ΠAi = A0*A1*...*An
微分方程式
 atvalue(関数,独立変数=値,関数値); 初期値を代入
 desolve(微分方程式,求める関数); 微分方程式を解く
グラフ表示 (2D,　3D)
 plot2d([関数...]，[変数，始値，終値]); /* 2次元グラフ */ 
 plot3d([関数...]，[変数1，始値1，終値1]，[変数2，始値2，終値2]); /* 3次元グラフ */
プログラム
 条件式
 = 等しい
 # 等しくない
 <, >, >=, <= 実数として、大小関係を問う
 条件式1 and 条件式2 and ...
 条件式1 or 条件式2 or ...
 分岐
 if 条件式then 真の場合の処理else 偽の場合の処理;
 ループ
 for カウンタ名:初期値step 増分thru 終了値do(反復実行手続き);
 for カウンタ名:初期値step 増分while 条件式do(反復実行手続き);
 関数化(リスト化)
 block([局所変数のリスト], 一連の手続き,return(計算結果));
ファイル入出力
 ファイルデータをエディタを使って編集することも可能です。
 書き出し
 save("ファイル名",all);
 読み込み
 loadfile("ファイル名");
 実行結果表示
 playback(all);