|
3.5.4 発展:導関数の表し方
Mathematicaの導関数は標準的な数学に現れる導関数と同じように使える.ただし,通常の数学表記は細かい点が省略されており, Mathematicaにおける導関数の表し方を理解するには,細かい点も含めて考察する必要がある.
数学表記で導関数を と書くとき,正式には, を「ダミー変数」とした を意味する.同様に, と書けば, を意味する. の記述が示唆するように,オブジェクト は「純粋な関数」と見なせ,その値はパラメータ の値が決まると計算することができる.ある関数 を微分するということを,通常 と呼ばれる新たな関数を与える演算ととらえてもよい.
関数が複数の引数を持つときは,ダッシュ(')を使った簡単な記述ができない.無理に,例えば, と記述しても,それが を表しているのか,または, なのか分からずじまいになってしまう.また,これらのオブジェクトは として実際に使う関数により値が違ってくるだろう.繰り返すようだが, とはダミー変数であり,それを使う理由は単に「どの位置」の変数に対して を微分するかを指定することにある.
特殊な数学の分野でそうであるように, Mathematicaでも式ではなく関数に作用するとした微分操作を想定すると便利である.必要な操作内容は,関数 を抽出し, の導関数 を返すというものである.このように変数ではなく関数を操作することを数学用語で関数的な演算と呼ぶ.
つまり, Mathematicaで得られるオブジェクト f'とは,微分関数を関数 fに適用した結果を示している. f'を完全形で見ると,Derivative[1][f]となっている. Derivative[1]の部分が微分関数に相当する.
関数 Derivative[ , , ... ]に与える引数は,引数と同じ「位置」の変数に対して何階の微分を行うか指定する.関数を使い微分を表しているので, Mathematicaでは特別な「ダミー変数」を導入する必要はない.
fの導関数を完全形で見てみる.
In[1]:= f' // FullForm
Out[1]//FullForm= 
引数として xを与える.
In[2]:= f'[x] // FullForm
Out[2]//FullForm= 
2次の導関数を求める.
In[3]:= f''[x] // FullForm
Out[3]//FullForm= 
関数 gを第2「位置」に関し微分する.
In[4]:= D[g[x, y], y]
Out[4]= 
完全形で確認する.
In[5]:= % // FullForm
Out[5]//FullForm= 
関数 gの第2位置にある変数 yに関し2階の導関数を求める.
In[6]:= D[g[x, y], {y, 2}] // FullForm
Out[6]//FullForm= 
これは,いろいろな微分成分が入った導関数である.
In[7]:= D[g[x, y], x, y, y] // FullForm
Out[7]//FullForm= 
Derivativeでは,各位置に対して何階の微分をするかだけを指定するため,微分の順序は関係ない.
In[8]:= D[g[x, y], y, y, x] // FullForm
Out[8]//FullForm= 
もっと複雑な例を見てみよう. gが2つ引数を持ち,両方とも微分変数に依存している.
In[9]:= D[g[x, x], x]
Out[9]= 
完全形で確認する.
In[10]:= % // FullForm
Out[10]//FullForm= 
f'は,基本的に他の Mathematicaの関数と同様に機能する.この関数は引数が何であっても評価可能だし, Mathematicaの置換記号/.を使い引数を変えることも可能である.(ただし,微分の過程でダミー変数が特別に導入されるとこの操作は使えなくなる.)
原点において評価した関数 fの導関数が内部でどう表されるか見てみる.
In[11]:= f'[0] // FullForm
Out[11]//FullForm= 
導関数には引数 x^2で微分した f'が入る.
In[12]:= D[f[x^2], x]
Out[12]= 
得られた導関数に置換操作を行うことで の点における導関数の値を求める.
In[13]:= % /. x->2
Out[13]= 
f[x_]のような関数の定義をもとに f'の値を決定するには,多少面倒な処理が必要になる.
関数 hを定義する.
In[14]:= h[x_] := x^4
h[x]の導関数を求めると,まず, h[x]が評価され,次に,評価の結果得られる式が微分される.
In[15]:= D[h[x], x]
Out[15]= 
関数 h'を引数 xに適用することでも同じ結果が得られる.
In[16]:= h'[x]
Out[16]= 
関数 h'そのものだとどうなるか見てみる.
In[17]:= h'
Out[17]= 
導関数 f'は,関数 fの持つ構造により完全に決定される. f[x_]のような関数の定義は,そのままでは f'[x]のような式に適用できない.これは,完全形では f'[x]が Derivative[1][f][x]と表されるために f[x_]のパターンにマッチできないからである.それでも,多くの場合, f'を単独の関数として扱い,引数を付けないでおいた方が便利である.
Mathematicaで関数の微分をすると,f'を表す純関数の明示的な定義を検索しようと試みる.例えば, Derivative[1][f]の式を与えると,これが D[f[#], #]&という明示的な形にまず変換され,続いて,可能であれば導関数が評価される.明示的な形ができれば,ただちに f[x_]のような関数定義が使われ導関数が構成される.この微分操作がうまくいけば,関数定義をもとにした導関数が返ってくる.一方,微分演算がうまくいかないと,もとの f'のままで返される.
Tanの導関数が純粋な関数の形で返ってくる.
In[18]:= Tan'
Out[18]= 
引数 yに先の純粋な関数を適用してみる.
In[19]:= %[y]
Out[19]= 
|