|
2.3.14 例:ユーザ定義による積分関数の構築
これまでは,パターンの持つ基本的な機能を紹介してきた.本節ではそれらの実践的な応用を考える.例として,パターンを使い積分を計算するためのユーザ定義関数を作ってみる.
数学的な観点から見ると,積分関数は,数学的な関係式のひとまとまりの集まりとして定義することができる.パターンに対して変換規則を設けることで,数学的な関係式を直接的にMathematicaで構築することができる.

積分公式のいくつかの定義
積分の線形関係を実現する. .
In[1]:= integrate[y_ + z_, x_] := integrate[y, x] + integrate[z, x]
Plusの結合則が有効なので,積分式には加算項がいくつあっても定義した線形関係は適用可能である.
In[2]:= integrate[a x + b x^2 + 3, x]
Out[2]= 
FreeQを使い,積分変数に依存しない係数を積分の外に引き出すための式を定義する.
In[3]:= integrate[c_ y_, x_] := c integrate[y, x] /; FreeQ[c, x]
各積における各項がFreeQによる条件を満足するかどうかが判定される.満足する項は引き出される.
In[4]:= integrate[a x + b x^2 + 3, x]
Out[4]= 
定数の積分 を定義する.
In[5]:= integrate[c_, x_] := c x /; FreeQ[c, x]
これで定数の項は積分できるようになった.
In[6]:= integrate[a x + b x^2 + 3, x]
Out[6]= 
これは, の積分のための公式を与える.x_^n_.を使い, の特殊な場合にも対応できるようにする.パターンはx_^n_では対応できない.
In[7]:= integrate[x_^n_., x_] := x^(n+1)/(n+1) /; FreeQ[n, x] && n != -1
これですべての項を積分できるようになった.
In[8]:= integrate[a x + b x^2 + 3, x]
Out[8]= 
もちろん,組込み関数(頭文字が大文字I)Integrateを使えば初めからできたことではある.
In[9]:= Integrate[a x + b x^2 + 3, x]
Out[9]= 
これは,線形関数の逆数を積分するための規則である.パターンa_. x_ + b_.は,線形であればどんなxの関数でも表せる.
In[10]:= integrate[1/(a_. x_ + b_.), x_] := Log[a x + b]/a /; FreeQ[{a,b}, x]
ここで,a,bはともにそれぞれに割り当てられているデフォルト値を取る.
In[11]:= integrate[1/x, x]
Out[11]= 
もっと複雑な場合を見てみよう.今度は,シンボルaが2 pにマッチする.
In[12]:= integrate[1/(2 p x - 1), x]
Out[12]= 
さらに,積分用の規則を加えていくことができる.最後に,指数関数を積分するための規則を定義する.
In[13]:= integrate[Exp[a_. x_ + b_.], x_] := Exp[a x + b]/a /; FreeQ[{a,b}, x]
|