Maple

Maple（メイプル）は、カナダの Waterloo Maple Inc.（以下 Maplesoft）によって開発されている数式処理ソフトウェアである。Maple は、記号計算、数値解析、データ処理、統計処理、可視化などを行うことができる。数学（四則演算、微積分、常微分方程式、偏微分方程式、数論、群論、グラフ理論、統計など）や物理に関する幅広い分野をカバーしている。日本では、Maplesoft Japan や代理店により販売される。「Maple」という名前は、カナダの国旗を象徴している。
概要.
Maple は、1980年代前半にカナダのウォータールー大学で開発された、数式処理、数値計算、グラフ作成などを行うソフトウェアのひとつである。Maple は、マルチパラダイムのプログラミング言語である。記号計算、数値解析、データ処理、統計処理、可視化など、幅広い計算ができる。Mapleを使うと、紙と鉛筆で行う数学の計算や作図をコンピュータで行うことができる。
Maple は、Waterloo Maple Inc.（以下 Maplesoft）によって商業的に開発および販売されている。
日本では、Maplesoft Japan 株式会社およびサイバネットシステム株式会社が販売および技術サポートを行っている。Maplesoft は、2009年9月にサイバネットシステム株式会社に買収された。
Maple は、小学校、中学校、高校などの初等教育の現場における数学、理科の授業から、大学の研究機関や企業のR&D 部門などに至るまで、幅広いユーザ層に利用されている。
Maple のライセンスは、固定マシンにインストールするスタンドアロン版と複数人同時利用可能なネットワーク版が用意されている。教育機関向け、一般企業向け、学生、趣味・個人利用の形態で、ライセンスが用意されている。
Maple は、教科書で見るような数学表記で数式の入力ができるため、可読性の高いドキュメントを作成可能である。厳密解を求めることを得意としているが、記号計算、任意の精度での数値計算、可視化も可能である。また、埋め込みコンポーネントと呼ばれる GUI 部品を用いて、Maple 上で動作するユーザ独自の計算アプリケーションの作成も可能である。
Maple は Pascalに似た動的型付け言語を組み込んでおり、静的スコープの変数を受け入れる。他の言語（C、C＃、Fortran、Java、MATLAB、Visual Basic）や Microsoft Excelとの連携も可能である。また、数式を LaTeX に変換する機能もある。
機能.
Maple には次のような機能がある。
ユーザインタフェース.
ワークシート
Maple は、ワークシートと呼ばれるワークスペースに数式や文書を記述する。このワークシートには、「ワークシートモード」と「ドキュメントモード」と呼ばれる2種類のモードがある。ワークシートモードは、主に計算を行う場合やプログラミングの際に役立つ。ワークシートには、グループとプロンプトが挿入され、計算実行のラインを明確にする。一方でドキュメントモードは、計算実行可能な数式を含む文書作成に役立つ。ワークシートモードとは異なり、ドキュメントモードは Word のように、まっさらなドキュメントを提供する。いずれのモードも文字のフォント、サイズ、色の変更の方法は、Word に近い。
数式の入力形式
また、Maple は2種類の数式入力形式を有し、それぞれ「1D Math 入力」、「2D Math 入力」と呼ばれる。
1D Math 入力は、計算やプログラミングの際に、よく使われる。タイプした文字が、そのまま表示される。
例: diff(sin(x))
一方で、2D Math 入力は、教科書で見るような数式の入力を可能にする。可読性が高まるため、教材の作成や技術文書の作成に向いている。
例;
例.
積分.
次の式を計算する。
 int(cos(x/a), x);
出力:
行列式.
次の行列式を計算する。
 M := Matrix(1,2,3], [a,b,c], [x,y,z); 
 LinearAlgebra:-Determinant(M);
級数展開.
series(tanh(x), x = 0, 15)
方程式の数値解.
高次の多項式の根を数値的に計算する。
 f := x^53-88*x^5-3*x-5 = 0
 fsolve(f)
同じコマンドで連立方程式の解を求められる。
 f := (cos(x+y))^2 + exp(x)*y+cot(x-y)+cosh(z+x) = 0:
 g := x^5 - 8*y = 2:
 h := x+3*y-77*z=55;
 fsolve( {f,g,h} );
1変数関数のプロット.
formula_10 を formula_11 = -10 から 10 の範囲で描画する。
 plot(x*cos(x), x = -10..0);
2変数関数のプロット.
formula_12 をformula_11 と formula_14 が -1 から 1 までの範囲で描画する。
plot3d(x^2+y^2, x = -1..1, y = -1..1);
関数のアニメーション.
plots:-animate(subs(k = 0.5, f), x=-30..30, t=-10..10, numpoints=200, frames=50, color=red, thickness=3);
plots:-animate3d(cos(t*x)*sin(3*t*y), x=-Pi..Pi, y=-Pi..Pi, t=1..2);
 M := Matrix(400,400,200], [100,100,-400], [1,1,1, datatype=float[8]):
 plot3d(1, x=0..2*Pi, y=0..Pi, axes=none, coords=spherical, viewpoint=[path=M]);
ラプラス変換.
f := (1+A*t+B*t^2)*exp(c*t);
 inttrans:-laplace(f, t, s);
inttrans:-invlaplace(1/(s-a), s, x);
フーリエ変換.
 inttrans:-fourier(sin(x), x, w)
積分方程式.
積分方程式を満たす関数 formula_20 を求める。
eqn:= f(x)-3*Int((x*y+x^2*y^2)*f(y), y=-1..1) = h(x):
intsolve(eqn,f(x));
数式、関数の定義、代入、代数演算等に関するコマンド.
代数演算.
代数演算とは加減乗除および階乗（平方根等を含む）及びはそれらを組み合わせることで作られる演算の総称である。以下、主な代数演算について説明する。
関数の定義.
関数の定義は以下のように行う。例えば関数fをformula_23と定義したい場合には、
 f:=x->x*exp(-x^2); 
と入力すればよい。2変数以上の関数もほぼ同様で、例えば関数fをformula_24と定義したい場合には、
 g:=(x,y)->y*exp(-x^2);
と入力すればよい。一般に関数には変数が存在する。人間は関数を見せられた場合に『何が変数であるか』を理解できるが、機械はそうではない。したがって、変数が何なのかを明示する必要がある。上記のコマンドにおいて、変数が何なのかを明示する役割を果たしている記号がそれぞれ『x->』『(x,y)->』である。もちろん
 f:=x*exp(-x^2);
のように変数を明示しない定義の仕方もあるが、これだと、後々別のコマンドと組み合わせる際に何らかの不都合が生じる可能性がある。
代入.
代入に関するコマンド、つまり、文字式や関数に、文字や数字を代入するためのコマンドとしては、evalとsubsが代表的である。
evalによる代入.
evalコマンドを用いると、文字式や関数に、文字や数字を代入できる。
> eval(x^2+x+1 , x=1);
 f:=(x,y,z)->y*exp(-x^2)+z;
> eval(poly,[x=2,y=3,z=t]);
subsによる代入.
同様にsubsコマンドを使えば、文字式や関数に、文字や数字を代入できる。ただし、代入する側の位置と代入する側の位置が、evalとは逆になっている。
 subs( x=2, x^2+x+1 );
 subs( x=A, x^2+x+1 );
 h:=x*exp(-x^2);
 subs( x=A, f );
（駄目）
 f:=x->x*exp(-x^2):
 subs( x=A, f );
 f
 f:=x->x*exp(-x^2):
 subs( x=A, f(x) );
evalとsubsの違い.
evalコマンドとsubsコマンドの違いは、次の例において顕著である。
expr := sin(x)/cos(x);
subs(x=0,expr);
eval(expr,x=0);
> der := diff(f(x),x) + f(x);
 / d \ 
 der := |--- f(x)| + f(x)
 \ dx / 
> eval(der,x=0);
 / / d \\ 
 |eval|--- f(x), {x = 0}|| + f(0)
 \ \ dx // 
> subs(x=0,der);
 (diff(f(0), 0)) + f(0)
subsは評価(evaluation)をせずに代入するのみ。evalは評価したあとに代入する。
整式の整理.
多項式等を降冪の順や昇冪の順にならべることができる。ただし、Sinの次数について並べ替えるのは難しい。
グラフ描画に関するコマンド.
基本コマンド plot , plot3d および描画パッケージ plots(パッケージ内に描画用のコマンド群が含まれています。)
基本構文.
曲線を描画する plot コマンドの基本形は、以下となります
 plot(曲線の定義式、x=a..b,options);
曲面を描画する plot3d コマンドの基本形は、以下となります
 plot3d(曲面の定義式, x=a..b, y=c..d, options) ;
x,y,z で、陰関数で定義されたグラフの場合は
 plots[implicitplot3d](陰関数による曲面の定義式, x=a..b, y=c..d,z=e..f, options) 
である。その他に媒介変数表示等も可能だが、それは下の表に纏めます。
　ただし、曲面を描画する場合には、
 with(plots): 
を予め読み込んでおかねばならない。具体的には、
 with(plots):
 implicitplot3d(x^2+y^2=1, x=-1..1, y=-1..1) 
のようにすればよい。ただし、この場合はzの定義域や、曲面の色やグリッドを指定するためのoptionは省略した（省略しても問題ない）。
また、with(plots):は同じシェルの上で作業する限り一度読み込めば、あとはそのシェルを終了するまで有効なので、
 
 plot3d(x+y, x=1..2, y=1..2); 
 別の作業
 with(plots):
 implicitplot3d(x^2+y^2=1, x=-1..1, y=-1..1);
のように、一度だけ読み込んでその後は読み込む必要がないが、
 
 plot3d(x+y, x=1..2, y=1..2); 
 別の作業
 with(plots):
 implicitplot3d(x^2+y^2=1, x=-1..1, y=-1..1);
のように、曲面を描くたびに読み込んでも別段問題がない。
一般性を持った曲面描画のプログラム.
基本はこれでよいのだが、現実には『複数の曲面や曲線を同じエリアに描く』あるいは
『予め定義しておいた関数に関するグラフを書く』あるいはその両方を行うことが
単独のグラフを書くことに比べ多いだろう。
そのため、比較的応用範囲が広いプログラムを一つ挙げておこう。以下のプログラムは、
『ｇ（x,y）の定義を行ったうえでそれのグラフとg(x,y)=1についての陰関数を、表示色を変えて同時に表示させる』ものである。
 with(plots): 
 g:=(x,y)->y*exp(-x^2); 
 p1:=plot3d(g(x,y),x=-3..4,y=-2..4,axes=boxed):
 p2:=implicitplot3d(g(x,y)=1,x=-3..4,y=-2..4,z=-2..4,axes=boxed,grid= [15,15,15],style=patchnogrid):
 display(p1,p2);
表示するグラフを3つ以上に増やすこともできる
 with(plots):
 g:=(x,y)->y*exp(-x^2);
 p1:=plot3d(g(x,y),x=-3..4,y=-2..4,axes=boxed):
 p2:=implicitplot3d(g(x,y)=1,x=-3..4,y=-2..4,z=-2..4,axes=boxed,grid=[15,15,15],style=patchnogrid):
 p3:=plot3d(x*y ,x=-3..4,y=-2..4,axes=boxed):
 display(p1,p2,p3);　
もちろん、1種類の曲面のみを表すことも、可能である。
 with(plots):　
 g:=(x,y)->y*exp(-x^2);
 p1:=plot3d(g(x,y),x=-3..4,y=-2..4,axes=boxed):
 display(p1);
尚、g,p1,p2　等の変数名は好きなように変えてよい。（変更で影響を受ける部分、例えば『display(p1,p2);』等も同時に正しく変更すれば）問題ない。例えば
 with(plots): 
 f:=(x,y)->y*exp(-x^2); 
 p:=plot3d(g(x,y),x=-3..4,y=-2..4,axes=boxed):
 q:=implicitplot3d(f(x,y)=1,x=-3..4,y=-2..4,z=-2..4,axes=boxed,grid= [15,15,15],style=patchnogrid):
 display(p,q);
のようにしても何も問題ない。
曲面描画の主なオプション.
曲面の形式としては、グラフ（plot3d）、陰関数のグラフ(implicitplot3d)等がある。
その他のものは以下の表に纏める。
関連書籍.
和書.
出版順に並べる。年、月、日が不明なものはそれぞれ明らかなものよりも前側に置くことにする。