Maple

**Maple**（メイプル）は、カナダの（以下**Maplesoft**）によって開発されている数式処理ソフトウェアである。Mapleは、記号計算、数値解析、データ処理、統計処理、可視化などを行うことができる。数学（四則演算、微積分、常微分方程式、偏微分方程式、数論、群論、グラフ理論、統計など）や物理に関する幅広い分野をカバーしている。「Maple」という名前は、カナダの国旗を象徴している。

## 概要
Mapleは1980年代前半にカナダのウォータールー大学で開発された、数式処理、数値計算、グラフ作成などを行うソフトウェアのひとつである。記号計算、数値解析、データ処理、統計処理、可視化など、幅広い計算ができる。Mapleを使うと、紙と鉛筆で行う数学の計算や作図をコンピュータで行うことができる。

Mapleを開発するWaterloo Maple Inc.（Maplesoft）は2009年9月に日本での販売および技術サポートを担当するサイバネットシステム株式会社に買収された。

Mapleのライセンスは、固定マシンにインストールするスタンドアロン版と複数人同時利用可能なネットワーク版が用意されている。教育機関向け、一般企業向け、学生、趣味・個人利用の形態で、ライセンスが用意されている。

Mapleは、教科書で見るような数学表記で数式の入力ができるため、可読性の高いドキュメントを作成可能である。厳密解を求めることを得意としているが、記号計算、任意の精度での数値計算、可視化も可能である。また、埋め込みコンポーネントと呼ばれる GUI 部品を用いて、Maple上で動作するユーザ独自の計算アプリケーションの作成も可能である。

MapleはPascalに似た動的型付き言語を組み込んでおり、静的スコープの変数を受け入れる。他の言語（C言語、C#、Fortran、Java、MATLAB、Visual Basic）やMicrosoft Excelとの連携も可能である。また、数式をに変換する機能もある。

## 機能
Mapleには次のような機能がある。
* 複素数、区間演算、記号計算および任意精度の数値計算
* 初等関数および特殊関数ライブラリ
* 常微分方程式 (ODE)、偏微分方程式 (PDE)、微分代数方程式 (DAE)、遅延微分方程式 (DDE)、ディオファントス方程式、漸化式のソルバー
* 有理数、有限体、代数体、代数関数体に対する多変量多項式の計算、最大公約数、因数分解
* 極限、級数、漸近展開
* グレブナー基底
* 微分代数
* 疎行列を含む行列とデータの操作
* 数学関数グラフとアニメーション生成
* 不定および定積分、定および不定合計、自動微分、連続および離散積分変換を含む、離散および連続計算のための数値および記号ツール
* 制約付きおよび制約なしの局所的および大域的最適化
* モデルフィッティング、仮説検定、確率分布を含む統計
* データ操作、視覚化、分析のためのツール
* 確率および組み合わせ問題のツール
* 時系列および単位ベースのデータのサポート
* 財務および経済データのオンライン収集への接続
* 債券、年金、デリバティブ、オプションなどの財務計算ツール
* ランダムプロセスの計算とシミュレーション
* 正規表現を含むテキストマイニングのためのツール
* 信号処理および線形および非線形制御システム用のツール
* 数論を含む離散数学ツール
* 有向グラフと無向グラフを視覚化および分析するためのツール
* 順列と有限に提示されたグループを含むグループ理論
* シンボリックテンソル関数
* データ、画像、サウンド、CAD、およびドキュメント形式のフィルターのインポートとエクスポート
* 数式を含む技術文書作成
* 手続き型、関数型、オブジェクト指向をサポートするプログラミング言語
* ユーザーインターフェースを計算とアプリケーションに追加するツール
* SQL、Java、.NET、C++、Fortran、HTTPへの接続
* C言語、C#、Fortran、Java、JavaScript、Julia、MATLAB、Perl、Python、R、およびVisual Basicのコード生成
* 並列プログラミングのためのツール

## ユーザインタフェース
### ワークシート
Mapleは、ワークシートと呼ばれるワークスペースに数式や文書を記述する。このワークシートには、「ワークシートモード」と「ドキュメントモード」と呼ばれる2種類のモードがある。ワークシートモードは、主に計算を行う場合やプログラミングの際に役立つ。ワークシートには、グループとプロンプトが挿入され、計算実行のラインを明確にする。一方でドキュメントモードは、計算実行可能な数式を含む文書作成に役立つ。ワークシートモードとは異なり、ドキュメントモードはWordのように、まっさらなドキュメントを提供する。いずれのモードも文字のフォント、サイズ、色の変更の方法は、Wordに近い。

### 数式の入力形式
また、Mapleは2種類の数式入力形式を有し、それぞれ「1D Math 入力」、「2D Math 入力」と呼ばれる。1D Math 入力は、計算やプログラミングの際に、よく使われる。タイプした文字が、そのまま表示される。

例: diff(sin(x))

一方で、2D Math入力は、教科書で見るような数式の入力を可能にする。可読性が高まるため、教材の作成や技術文書の作成に向いている。
例;

## 例
### 積分
次の式を計算する。
:\int\cos\left(\frac{x}{a}\right)dx.

```mupad
int(cos(x/a), x);
```

出力:
:a \sin\left(\frac{x}{a}\right)

### 行列式
次の行列式を計算する。

```mupad
M := Matrix([[1,2,3], [a,b,c], [x,y,z]]);
```

: 
  \begin{bmatrix}
    1 & 2 & 3 \\
    a & b & c \\
    x & y & z
  \end{bmatrix}

 LinearAlgebra:-Determinant(M);
: bz-cy+3ay-2az+2xc-3xb

### 級数展開

```mupad
series(tanh(x), x = 0, 15)
```

:x-\frac{1}{3}\,x^3+\frac{2}{15}\,x^5-\frac{17}{315}\,x^7
:{}+\frac{62}{2835}\,x^9-\frac{1382}{155925}\,x^{11}+\frac{21844}{6081075}\,x^{13}+\mathcal{O}\left(x^{15}\right)

### 方程式の数値解
高次の多項式の根を数値的に計算する。

```mupad
f := x^53-88*x^5-3*x-5 = 0

 fsolve(f)
```


:-1.097486315, -.5226535640, 1.099074017

同じコマンドで連立方程式の解を求められる。

```mupad
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} );

{x = -1.543352313, y = -1.344549481, z = -.7867142955}
```


### 1変数関数のプロット
x \sin(x) を x = -10 から 10 の範囲で描画する。

```mupad
plot(x*cos(x), x = -10..0);
```


### 2変数関数のプロット
x^2+y^2 をx と y が -1 から 1 までの範囲で描画する。

```mupad
plot3d(x^2+y^2, x = -1..1, y = -1..1);
```


### 関数のアニメーション
* 2変数関数のアニメーション
:f := \frac{2k^2}{\cosh^2\left(x k - 4 k^3 t\right)}

```mupad
plots:-animate(subs(k = 0.5, f), x=-30..30, t=-10..10, numpoints=200, frames=50, color=red, thickness=3);
```


* 3変数関数のアニメーション

```mupad
plots:-animate3d(cos(t*x)*sin(3*t*y), x=-Pi..Pi, y=-Pi..Pi, t=1..2);
```


* 3Dプロットのフライスルーアニメーション 

```mupad
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]);
```


### ラプラス変換
* ラプラス変換

```mupad
f := (1+A*t+B*t^2)*exp(c*t);
```

: \left(1 + A \, t + B \, t^2\right) e^{c t}

```mupad
inttrans:-laplace(f, t, s);
```

:\frac{1}{s-c}+\frac{A}{(s-c)^2}+\frac{2B}{(s-c)^3}

* 逆ラプラス変換

```mupad
inttrans:-invlaplace(1/(s-a), s, x);
```

: e^{ax}

### フーリエ変換
* フーリエ変換

```mupad
inttrans:-fourier(sin(x), x, w)
```

:\mathrm{I}\pi\,(\mathrm{Dirac}(w+1)-\mathrm{Dirac}(w-1))

### 積分方程式
積分方程式を満たす関数 f を求める。
:f(x)-3\int_{-1}^1(xy+x^2y^2)f(y)dy = h(x).

```mupad
eqn:= f(x)-3*Int((x*y+x^2*y^2)*f(y), y=-1..1) = h(x):
intsolve(eqn,f(x));
```

:f \left( x \right) =\int _{-1}^{1}\! \left( -15\,{x}^{2}{y}^{2}-3\,xy \right) h \left( y \right) {dy}+h \left( x \right)


### 数式、関数の定義、代入、代数演算等に関するコマンド
#### 代数演算
代数演算とは加減乗除および階乗（平方根等を含む）及びはそれらを組み合わせることで作られる演算の総称である。以下、主な代数演算について説明する。

#### 関数の定義
関数の定義は以下のように行う。例えば関数fをf(x)=x\times \exp(-{x}^{2})と定義したい場合には、

 f:=x->x*exp(-x^2); 

と入力すればよい。2変数以上の関数もほぼ同様で、例えば関数fをg(x,y)=y\times \exp(-{x}^{2})と定義したい場合には、

 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）等がある。
その他のものは以下の表に纏める。

## 関連製品
* MapleSim - Modelica言語ベースのモデリング＆シミュレーションツール。1D CAE または MBD ツールとも呼ばれる。Maple を計算エンジンとしている。
* Maple Flow - 機能的には Maple とほぼ同じだが、パワーポイントの様に自由に数式や文書を記述・配置できるツール。
* Maple Calculator - 無料のスマートフォン用計算アプリケーション。数式の入力またはカメラでの数式撮影で、問題を解いたり、グラフの描画が可能。Maple Learn ,MapleCloud および Maple との連携が可能。
* Maple Learn - オンライン計算環境。中学、高校から大学始め頃の数学学習に特化している。無料で利用可能（制限あり）。
* MapleCloud - 無料のクラウド環境。ウェブブラウザで、Maple ドキュメントの閲覧および計算アプリケーションの実行が可能。
* Maple Net - ウェブブラウザで、Maple ドキュメントの閲覧および計算アプリケーションの実行が可能。MapleCloud との違いは、ユーザが所有する環境にサーバが立てられる。
* Global Optimization Toolbox - Maple のアドオン製品。大域最適化を行うことができる。
* Quantum Chemistry Toolbox - Maple のアドオン製品。量子化学の計算やグラフ描画を行う製品。

## 類似製品との比較
* インタフェースはMathematicaと類似しているが、微分方程式の計算やグラフ描画機能などにおいて特に優れているとされている。
* Mathematicaと比較して少ないメモリとハードディスク容量で計算が可能である。
* 本来、記号解の導出を想定して設計してあり、ほとんどの計算において記号解を出すことが可能である。
* Mathematicaと比較して、膨大な量の計算を長時間かかって行うには不向きと考えられている。
* Mathematicaと比較して、特化した用法へのアドインのアプリケーションが寡少である。
* Maple言語を用いたプログラミングは、C言語やPython言語に似ている。
* 埋め込みコンポーネントと呼ばれるGUI部品を用いて、計算アプリケーションを簡単に作成できる。

## 関連書籍
### 和書
出版順に並べる。年、月、日が不明なものはそれぞれ明らかなものよりも前側に置くことにする。
* B.W. チャー、G.H. ゴネット、M.B. モナガン、K.O. ゲディス：「よくわかるMaple 5」、シュプリンガー・フェアラーク東京、ISBN 978-4431706526（1993年8月）。
* B.W. チャー、G.H. ゴネット、M.B. モナガン、K.O. ゲディス：「はじめてのMaple5」、シュプリンガー・フェアラーク東京、ISBN 978-4431706519（1993年8月）。
* 守谷 両時:「Mapleで数学を 入門編」、海文堂出版、ISBN 978-4303732608（1996年3月）。
* 守谷両時：「Mapleで数学を―線形代数編」、海文堂出版、ISBN 978-4303732707 (1996年4月）。
* K.M. ヒール、K.M. リカード、M.L. ハンセン：「はじめてのMaple V〈リリース4〉」、シュプリンガー・フェアラーク東京、ISBN 978-4431707288（1997年4月）。
* 小国力：「Maple Vと利用の実際 -数式処理とCG-」、サイエンス社、ISBN 4-7819-0829-2（1997年5月25日）。
* ユージン・W. ジョンソン；「MAPLE V 線形代数」 (実践数式処理シリーズ)、ISBN 978-4900718395（1997年7月）。
* アルバート ボッジス, ディビット バロー:「MAPLE V 微積分」 (実践数式処理シリーズ)、オーム社、ISBN 978-4900718418（1997年8月）。
* ナンシー・R. ブラックマン, マイケル・J. モッシンホフ:「Maple V リファレンスブック」 (実践数式処理シリーズ)、オーム社、4-900718-42-4（1997年9月12日）。
* Eade Ellis, Jr.+Eugene Johnson+Ed Lodi + Daniel Schwalbe:「Maple V Release 4 - 数式処理入門」、オーム社、4-900718-49-1(1997年9月22日)。
* 守谷両時：「Mapleで数学を―微積分編Ｉ」、海文堂出版、ISBN 978-4303732806(1997年10月)。
* 守谷両時：「Mapleで数学を―微積分編 II」、海文堂出版、ISBN 978-4303732905（1997年10月）。
* ウィリアム・C. ボウドリー , ジョセフ・R. フィドラー ：「MAPLE 5 応用数学」 (実践数式処理シリーズ) 、オーム社、ISBN 978-4900718487(1997年10月）。
* ウエイド エリス ジュニア、エド ロディ、ユージン ジョンソン：「MAPLE V数式処理入門〈Release4〉」(実践数式処理シリーズ) 、オーム社、ISBN 978-4900718494（1997年10月）。
* C.T.J. ドッドソン (著), E.A. ゴンザレス：「Maple Vで学ぶ実験数学」、シュプリンガー・フェアラーク東京、ISBN 978-4431707387（1997年10月）。
* ジョン・S. デビット:「MAPLE V 数学解法事典」 (実践数式処理シリーズ) 、オーム社、ISBN 978-4900718548（1997年12月）。
* 阿部寛：「Maple Vによる数式処理入門ー物理・工学への応用」、講談社サイエンティフィック、ISBN 4-06-153230-8（1998年3月10日）。
* A.I. ベルツァー：「シミュレーション工学入門―Maple/Mathematicaによる導入」、培風館、ISBN 978-4563035280 (1998年9月)。
* K.M.ヒール、M.L.ハンセン、K.M.リカード：「Maple V リリース5、ラーニングガイド」、シュプリンガーフェアラーク東京、ISBN 4-431-70776-X (1998年9月25日)。
* 示野信一： 「Maple Vで見る数学ワールド」、シュプリンガー・フェアラーク東京、ISBN 978-4431708001（1999年5月）。
*「MAPLE V 微積分」 (実践数式処理シリーズ)、オーム社、ISBN 978-4274024245（2000年4月）。
* 赤間世紀:「はやわかりMaple」、共立出版、ISBN 978-4320029866 (2000年8月10日)。
* 井上毅 :「Mapleによる確率・統計」、森北出版、ISBN 978-4627094710（2001年4月）。
* クリストファー・S. トッチィ, スティーブン アダムス:「技術者と科学者のためのMaple活用技法」、 秀和システム、ISBN 978-4798001067（2001年4月16日）。
* Waterloo Maple Inc(編)：「maple 7ラーニングガイド」、シュプリンガーフェアラーク東京、ISBN 4-431-70960-6 (2002年3月3日)。
* Waterloo Maple Inc. (編)：「Maple 7 プログラミングガイド」、 シュプリンガー・フェアラーク東京、ISBN 978-4431709619（2002年6月）。
* 石渡昭一:「Maple Vによる強力超音波システムの理論と応用」、PS研究所、ISBN 978-4901951210（2006年8月）。
* 遠山聡一、佐藤晶信：「速習Maple- STEMコンピューティングを活用する機械系の工業数学 -」、 コロナ社、ISBN 978-4339028645（2016年10月13日）。

### 洋書
* Bruce W. Char, K.O. Geddes, Gaston H. Gonnet, B. Leong：*Maple V Reference Manual*, Springer-Verlag Berlin and Heidelberg GmbH & Co. K, ISBN 978-3-54097622-6 (1991/11).
* André Heck: *Introduction to Maple*, 3rd Ed., Springer, ISBN 978-1-4613-0023-6 (2003).

## 脚注

## 関連項目
* 数式処理システムの一覧 
* 主な応用数値解析ソフトウェア 
* 数値解析ソフトウェアの一覧 
* 数値解析ソフトの比較 
* Mathematica 
* Maxima 

## 外部リンク
* Maple 
* 学習院大学 数学科 Mapleチュートリアル
* 早稲田大学理工学メディアセンター Maple
* Maple入門 関西学院大学
* Maple Transactions (An open access online journal)