この項目では、数学計算ソフトウェアについて説明しています。その他の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 には次のような機能がある。
複素数 、区間演算 、記号計算および任意精度の数値計算
初等関数 および特殊関数 ライブラリ
常微分方程式 (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 入力は、教科書で見るような数式の入力を可能にする。可読性が高まるため、教材の作成や技術文書の作成に向いている。
例;
例
積分
次の式を計算する。
∫ ∫ -->
cos
-->
(
x
a
)
d
x
{\displaystyle \int \cos \left({\frac {x}{a}}\right)dx}
.
出力:
a
sin
-->
(
x
a
)
{\displaystyle a\sin \left({\frac {x}{a}}\right)}
行列式
次の行列式を計算する。
M := Matrix ([[ 1 , 2 , 3 ] , [ a , b , c ] , [ x , y , z ]]) ;
[
1
2
3
a
b
c
x
y
z
]
{\displaystyle {\begin{bmatrix}1&2&3\\a&b&c\\x&y&z\end{bmatrix}}}
LinearAlgebra:-Determinant(M);
b
z
− − -->
c
y
+
3
a
y
− − -->
2
a
z
+
2
x
c
− − -->
3
x
b
{\displaystyle bz-cy+3ay-2az+2xc-3xb}
級数展開
series ( tanh ( x ) , x = 0 , 15 )
x
− − -->
1
3
x
3
+
2
15
x
5
− − -->
17
315
x
7
{\displaystyle x-{\frac {1}{3}}\,x^{3}+{\frac {2}{15}}\,x^{5}-{\frac {17}{315}}\,x^{7}}
+
62
2835
x
9
− − -->
1382
155925
x
11
+
21844
6081075
x
13
+
O
(
x
15
)
{\displaystyle {}+{\frac {62}{2835}}\,x^{9}-{\frac {1382}{155925}}\,x^{11}+{\frac {21844}{6081075}}\,x^{13}+{\mathcal {O}}\left(x^{15}\right)}
方程式の数値解
高次の多項式の根を数値的に計算する。
f := x ^ 53 - 88 * x ^ 5 - 3 * x - 5 = 0
fsolve ( f )
− − -->
1.097486315
{\displaystyle -1.097486315}
,
− − -->
.5226535640
{\displaystyle -.5226535640}
,
1.099074017
{\displaystyle 1.099074017}
同じコマンドで連立方程式の解を求められる。
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
)
{\displaystyle x\sin(x)}
を
x
{\displaystyle x}
= -10 から 10 の範囲で描画する。
plot ( x * cos ( x ) , x = - 10. . 0 ) ;
2変数関数のプロット
x
2
+
y
2
{\displaystyle x^{2}+y^{2}}
を
x
{\displaystyle x}
と
y
{\displaystyle y}
が -1 から 1 までの範囲で描画する。
plot3d ( x ^ 2 + y ^ 2 , x = - 1. . 1 , y = - 1. . 1 ) ;
関数のアニメーション
f
:=
2
k
2
cosh
2
-->
(
x
k
− − -->
4
k
3
t
)
{\displaystyle f:={\frac {2k^{2}}{\cosh ^{2}\left(xk-4k^{3}t\right)}}}
plots :- animate ( subs ( k = 0.5 , f ) , x =- 30. . 30 , t =- 10. . 10 , numpoints = 200 , frames = 50 , color = red , thickness = 3 ) ;
2D bell solution
plots :- animate3d ( cos ( t * x ) * sin ( 3 * t * y ) , x =- Pi .. Pi , y =- Pi .. Pi , t = 1. . 2 ) ;
3D animation of function
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 ]) ;
Maple plot3D fly-through
ラプラス変換
f := ( 1 + A * t + B * t ^ 2 ) * exp ( c * t ) ;
(
1
+
A
t
+
B
t
2
)
e
c
t
{\displaystyle \left(1+A\,t+B\,t^{2}\right)e^{ct}}
inttrans :- laplace ( f , t , s ) ;
1
s
− − -->
c
+
A
(
s
− − -->
c
)
2
+
2
B
(
s
− − -->
c
)
3
{\displaystyle {\frac {1}{s-c}}+{\frac {A}{(s-c)^{2}}}+{\frac {2B}{(s-c)^{3}}}}
inttrans :- invlaplace ( 1 / ( s - a ) , s , x ) ;
e
a
x
{\displaystyle e^{ax}}
フーリエ変換
inttrans :- fourier ( sin ( x ) , x , w )
I
π π -->
(
D
i
r
a
c
(
w
+
1
)
− − -->
D
i
r
a
c
(
w
− − -->
1
)
)
{\displaystyle \mathrm {I} \pi \,(\mathrm {Dirac} (w+1)-\mathrm {Dirac} (w-1))}
積分方程式
積分方程式 を満たす関数
f
{\displaystyle f}
を求める。
f
(
x
)
− − -->
3
∫ ∫ -->
− − -->
1
1
(
x
y
+
x
2
y
2
)
f
(
y
)
d
y
=
h
(
x
)
{\displaystyle f(x)-3\int _{-1}^{1}(xy+x^{2}y^{2})f(y)dy=h(x)}
.
eqn := f ( x ) - 3 * Int (( x * y + x ^ 2 * y ^ 2 ) * f ( y ) , y =- 1. . 1 ) = h ( x ) :
intsolve ( eqn , f ( x )) ;
f
(
x
)
=
∫ ∫ -->
− − -->
1
1
(
− − -->
15
x
2
y
2
− − -->
3
x
y
)
h
(
y
)
d
y
+
h
(
x
)
{\displaystyle 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
× × -->
exp
-->
(
− − -->
x
2
)
{\displaystyle f(x)=x\times \exp(-{x}^{2})}
と定義したい場合には、
f:=x->x*exp(-x^2);
と入力すればよい。2変数 以上の関数もほぼ同様で、例えば関数fを
g
(
x
,
y
)
=
y
× × -->
exp
-->
(
− − -->
x
2
)
{\displaystyle 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);
のように、曲面を描くたびに読み込んでも別段問題がない。
一般性を持った曲面描画のプログラム
基本はこれでよいのだが、現実には『複数の曲面や曲線を同じエリアに描く』あるいは
『予め定義しておいた関数に関するグラフを書く』あるいはその両方を行うことが
単独のグラフを書くことに比べ多いだろう。
そのため、比較的応用範囲が広いプログラムを一つ挙げておこう。以下のプログラムは、
『g(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部品を用いて、計算アプリケーションを簡単に作成できる。
関連書籍
和書
出版順に並べる。年、月、日が不明なものはそれぞれ明らかなものよりも前側に置くことにする。
洋書
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-3540976226 (1991/11).
脚注
関連項目
外部リンク