矢印記号
Maple で自前の数学関数を定義する一番簡単な方法は矢印記号 ->
(マイナスと左向きの不等号の組合せ)を使うものだ.次の例では x の関数
x2 + 1
を f1 と名づけ,f1(2)=22 + 1 を計算している.
> | f1 := x -> x^2+1; |
> | f1(2); |
Maple の式 (expression)
Maple では上で定めたような関数(手続き)と式 (expression) は別のものである.
例として式 ex sin x を f2 と名づけよう.
> | f2 := exp(x)*sin(x); |
x = 0 における f2 の値を求めるには,eval を用いる.
> | eval(f2,x=0); |
10年以上前の Maple にはこのような eval の用法は無かったので,代入を行う命令
subs を用いていた.古くからのユーザーには今でも subs を使っている人もいる.
> | subs(x=0,f2); |
subs は形式的な置き換えを行うだけで,値を評価してくれない.
値を評価するには更に eval(または simplify など)を用いる必要がある.
(もっとも eval だけでは求めた値が十分簡単な形になっていない場合もあり,
その場合はやはり何らかの簡単化の命令を使う必要がある.)
> | eval(%); |
式から関数を作る(unapply)
上の例で定義した f2 という式を x
の関数として使いたいという要求にはどう応えればよいだろうか.
矢印記号を用いて x -> f2 とするのがもっともらしいのだが,
次に見るようにうまくいかない.(不便といえば不便だが,
Maple が部分式を評価する順番の規則に関わることで止むを得ない.)
> | f3 := x -> f2; |
> | f3(0); |
この問題点をどう解決すればよいかというと,
unapply を用いて式を指定した変数の関数を作ればよい.
(unapply を用いて多変数の関数を作ることもできる.)
> | f4 := unapply(f2,x); |
> | f4(0); |
上で説明した eval による値の評価を手続き (procedure) として定義する方法もある.
> | f5 := proc(t) eval(f2,x=t) end proc; |
> | f5(0); |
Maple の関数(よくある誤り)
関数を定義するときに変数を ( )
でくくって与えればよいのではないかと考えるのは自然だが,Maple
ではうまくいかない.
> | f6(x) := exp(x)*sin(x); |
> | f6(0); |
フリーの数式処理ソフトウエア Maxima では,上の2行をそのまま実行すると,
望む結果 0 が得られる.Mathematica も似たような方法で関数を定義することができる.
Maple ではそうなっていない.
unapply は Maple を使う上で便利で重要な命令である.
Maple に関する解説やマニュアルにもよく現れるが,
Maple 独特のことのためか Maple
を使っていても知らない人もいるようなので,関数と式の話を書いてみた.
(6/4/09)