Maxima

From Wikipedia, the free encyclopedia

Maxima(マキシマ)は、LISPで記述された数式処理システムである。GNU GPL に基づく自由ソフトウェアである。MapleMathematicaなどの商用の数式処理システムと比べても遜色のない機能を持っている。

開発元 Macsyma group at Project MAC and volunteer contributors
初版 1982年 (44年前) (1982)
最新版
5.49.0[1] ウィキデータを編集 / 18 December 2025年 (2か月前) (18 December 2025)
概要 開発元, 初版 ...
Maxima
Maxima logo
Ubuntu Linux における wxMaxima のスクリーンショット
開発元 Macsyma group at Project MAC and volunteer contributors
初版 1982年 (44年前) (1982)
最新版
5.49.0[1] ウィキデータを編集 / 18 December 2025年 (2か月前) (18 December 2025)
リポジトリ ウィキデータを編集
プログラミング
言語
Common Lisp
対応OS クロスプラットフォーム
種別 数式処理システム
ライセンス GPL
公式サイト maxima.sourceforge.io
テンプレートを表示
閉じる

略史

Maximaの起源は、マサチューセッツ工科大学MACプロジェクトによって開発され、米国エネルギー省(DOE)によって配布されていたDOE Macsymaの1982年のバージョンをGNU Common Lispに移植したものである。

1982年からMacsymaの独自のバージョンを管理・維持していたビル・シェルター英語版が、1998年にエネルギー省から GPLライセンスを適用することを条件に公開の許可[2]を得た。こうして公開されたプログラムはMaximaと呼ばれるようになった。

2001年のシェルターの死後、Maximaは開発者や利用者のグループによって、現在でも[いつ?]独自に開発が続けられている。

実装

上述のように、MaximaはGNU Common Lispへの移植から開発が始まったが、その後CLISPCMU Common Lisp (CMUCL) でも動作するように改良されている。V5.9 以降は、CLISPやCMUCLが標準になっている。

Maximaは、文法的にはALGOLに、意味的にはLispにそれぞれ類似のプログラム言語を備えており、プログラミングや計算機代数の教育用としても使えるようになっている。

またMaximaは、他の数式処理システムと同様に高度な記号処理機能を備えており、有理数や多倍長整数、多倍長浮動小数点の演算を可能にしている。浮動小数点数や配列の処理をより効率の良いFORTRANなどで処理するためのプログラム書き出しもサポートされている。

Maximaをグラフィカルユーザーインターフェースから操作するためのフロントエンドとして、TeXEmacsの発想を受け継いだGNU TeXmacswxWidgetsに基づいたwxMaxima、GNU 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);

脚注

関連項目

外部リンク

関連書籍

Related Articles

Wikiwand AI