|
3.5.7 可能な積分と不可能な積分
積分は微分よりずっと難しい.微分には合成関数の微分法等の手法があるので,どんな微分でも体系だった手順に従って求めることができる.積分には,そのような手順がない.
積分における主な問題は,対象とする関数の原始関数を見付けるのが難しいことにある.微分をしたなら,必ず,微分する前の関数と同程度か,または,それより簡単な関数が取得できる.積分の場合はそうはいかず,通常は,もとの関数よりずっと難解な関数が必要になってしまう.
この例の積分では,入力したもとの関数が使われる.
In[1]:= Integrate[Log[x]^2, x]
Out[1]= 
この例の積分を求めるには,特殊関数 LogIntegralが必要になる.
In[2]:= Integrate[Log[Log[x]], x]
Out[2]= 
各種の関数で表される積分を見付けるのは難しくない.
In[3]:= Integrate[Sin[x^2], x]
Out[3]= 
一見簡単に見える積分でも,実は,非常に難解な結果を生むときがある.そのようなときは Simplifyを使い答を簡約するとよいだろう.
In[4]:= Simplify[ Integrate[Log[x] Exp[-x^2], x] ]
Out[4]= 
この積分には不完全ガンマ関数が必要になる.答において, xがどんな複素数の値を取ろうが問題ないように解が構成されることに注目.
In[5]:= Integrate[Exp[-x^a], x]
Out[5]= 
Mathematicaには数学で使う各種の関数が多数組み込まれている.これらの関数を使うことで,非常に多くの積分を求めることができる.それでも,一見簡単に見えるが実は難解で標準的な数学の関数では求まらない積分がいくつもある.
この積分は一見簡単に見えるが,実は難解で,標準的な数学の関数では求まらない.
In[6]:= Integrate[Sin[x]/Log[x], x]
Out[6]= 
標準的な数学関数を使って原始関数を表したい主な理由は,積分で得られる結果を評価したりさらに変形操作を施したりする上でそれらの関数の持つ既知の性質が使えるからである.
通常使われる関数の場合,指数関数や対数関数もしくは三角関数だけを使って積分が求まる.ある関数の積分がこのような初等関数だけで表されるときは,Integrateを使うとその関数の積分を必ず見付けることができる.
有理関数の積分なら問題なく計算でき る.求まる積分は有理関数と対数関数,そして逆三角関数で構成される.
In[7]:= Integrate[x/((x - 1)(x + 2)), x]
Out[7]= 
この積分も同じ形を持つが,多項式の根について取った陰な和が入るところが違う.
In[8]:= Integrate[1/(1 + 2 x + x^3), x]
Out[8]= 
解の式すべてを数値近似する.
In[9]:= N[%]
Out[9]= 
三角関数の式を積分すると,通常,答の式も三角関数で構成される.
In[10]:= Integrate[Sin[x]^3 Cos[x]^2, x]
Out[10]= 
代数演算の関数を使った簡単な式を積分してみよう.
In[11]:= Integrate[Sqrt[x] Sqrt[1 + x], x]
Out[11]= 
今度は,ネストした平方根を積分する.
In[12]:= Integrate[Sqrt[x + Sqrt[x]], x]
Out[12]= 
初等関数を合成した式の積分は,求まった積分も初等関数で構成されるときがある.
In[13]:= Integrate[Cos[Log[x]], x]
Out[13]= 
しかし,この例のような別の種類の関数が必要になる式はさらに多くある.
In[14]:= Integrate[Log[Cos[x]], x]
Out[14]= 
この種の積分は楕円関数を使わないと解けない.
In[15]:= Integrate[Sqrt[Cos[x]], x]
Out[15]= 
それでも,初等関数だけで積分が解けるときもある.
In[16]:= Integrate[Sqrt[Tan[x]], x]
Out[16]= 
Integrateでは,初等関数以外にも,多数のアルゴリズムが使われ特殊関数の積分が行われる.アルゴリズムのいくつかは初等関数のときの積分法を直接一般化した手法に基づいている.しかし,多くの場合,被積分関数を特殊な関数で表しておいて,その積分を求めた上で,適当に一般的によく知られている関数に帰着させる方法が取られる.
このベッセル関数を積分するには,一般化された超幾何関数が必要になる.
In[17]:= Integrate[BesselJ[0, x], x]
Out[17]= 
楕円積分を積分する.答に全く同じ種類の一般化された超幾何関数が使われる.
In[18]:= Integrate[EllipticK[x], x]
Out[18]= 
式によっては,積分するとより分かりやすい形になる.
In[19]:= Integrate[x^3 BesselJ[0, x], x]
Out[19]= 
積分の公式を集めた本にはおよそ数千の不定積分が記載されている. Mathematicaは基本的にそのすべての積分を計算できる.さらに, Mathematicaには汎用アルゴリズムが備えられているので,特定の問題だけでなく非常に広範囲にわたる積分問題が解けるようにもなっている.
この積分は大きな積分の公式集なら必ず載っている.
In[20]:= Integrate[Log[1 - x]/x, x]
Out[20]= 
この積分は公式集を参照しただけでは解けない.もっと一般化されたアルゴリズムが必要になる.
In[21]:= Integrate[Log[1 + 3 x + x^2]/x, x]
Out[21]= 
特に,ユーザ定義の数学関数を導入したなら,新しい種類の積分法を Mathematicaに教えておくとよいだろう.これは Integrateに定義をつけ加えることでできる.
微分の計算をする場合,合成関数の微分法を使えば, MathematicaのDerivativeを使って標準的な形の関数が得られる.しかし,積分の場合は,そのような標準形がないので,場合によっては同じ積分から得られるいくつかの変形版を特別に定義してやらなければいけない.また, Integrateを使っても,自動的な変数の変換や他の変換操作はなかなかうまくできない.
Mathematicaに用意されている標準的な数学関数ではこの積分はできない.
In[22]:= Integrate[Sin[Sin[x]], x]
Out[22]= 
積分用の規則を追加する前にプロテクトを解除しておく.
In[23]:= Unprotect[Integrate]
Out[23]= 
この式の積分を例えば「ジョーンズ」(Jones)関数とするユーザ定義の規則を設ける.
In[24]:= Integrate[Sin[Sin[a_. + b_. x_]], x_] := Jones[a, x]/b
実際に積分してみる.Jones関数が使われ答が構成される.
In[25]:= Integrate[Sin[Sin[3x]], x]
Out[25]= 
積分 は 超幾何関数の級数かあるいは適当に一般化された2変数のカンペドフェリエ
(Kampé de Fériet)超幾何関数を用いて表される.
|