WOLFRAM言語チュートリアル

可能な積分と不可能な積分

積分は微分よりずっと難しい.微分には合成関数の微分法等の手法があるので,どんな微分でも体系だった手順に従って求めることができる.積分には,そのような手順がない.

積分における主な問題は,対象とする関数の原始関数を見付けるのが難しいことにある.微分をしたなら,必ず,微分する前の関数と同程度か,または,それより簡単な関数が取得できる.積分の場合はそうはいかず,通常は,もとの関数よりずっと難解な関数が必要になってしまう.

この例の積分では,入力したもとの関数が使われる.
In[1]:=
Click for copyable input
Out[1]=
この例の積分を求めるには,特殊関数LogIntegralが必要になる.
In[2]:=
Click for copyable input
Out[2]=
各種の関数で表される積分を見付けるのは難しくない.
In[3]:=
Click for copyable input
Out[3]=
この積分には不完全ガンマ関数が必要になる.答において, がどんな複素数の値を取ろうが問題ないように解が構成されることに注目.
In[4]:=
Click for copyable input
Out[4]=

Wolfram言語には数学で使う各種の関数が多数組み込まれている.これらの関数を使うことで,非常に多くの積分を求めることができる.それでも,一見簡単に見えるが実は難解で標準的な数学の関数では求まらない積分がいくつもある.

この積分は一見簡単に見えるが,実は難解で,標準的な数学の関数では求まらない.
In[5]:=
Click for copyable input
Out[5]=

標準的な数学関数を使って原始関数を表したい主な理由は,積分で得られる結果を評価したりさらに変形操作を施したりする上でそれらの関数の持つ既知の性質が使えるからである.

通常使われる関数の場合,指数関数や対数関数もしくは三角関数等の初等関数だけを使って積分が求まる.Integrateの重要な機能のひとつに,ある関数の積分がこのような初等関数だけで表されるとき,Integrateはその関数の積分を必ず見付けることができるというものがある.

有理関数の積分なら問題なく計算できる.求まる積分は有理関数と対数関数,そして逆三角関数で構成される.
In[6]:=
Click for copyable input
Out[6]=
この積分も同じ形を持つが,多項式の根について取った陰な和が入るところが違う.
In[7]:=
Click for copyable input
Out[7]=
解の式すべてを数値近似する.
In[8]:=
Click for copyable input
Out[8]=
三角関数の式を積分すると,通常,答の式も三角関数で構成される.
In[9]:=
Click for copyable input
Out[9]=
代数演算の関数を使った簡単な式を積分してみよう.
In[10]:=
Click for copyable input
Out[10]=
今度は,ネストした平方根を積分する.
In[11]:=
Click for copyable input
Out[11]=
初等関数を合成した式の積分は,求まった積分も初等関数で構成されるときがある.
In[12]:=
Click for copyable input
Out[12]=
しかし,この例のような別の種類の関数が必要になる式はさらに多くある.
In[13]:=
Click for copyable input
Out[13]=
この種の積分は楕円関数を使わないと解けない.
In[14]:=
Click for copyable input
Out[14]=
それでも,初等関数だけで積分が解けるときもある.
In[15]:=
Click for copyable input
Out[15]=
このような積分はPiecewiseを用いて系統的に行うことができる.
In[16]:=
Click for copyable input
Out[16]=

Integrateでは,初等関数以外にも,多数のアルゴリズムが使われ特殊関数の積分が行われる.アルゴリズムのいくつかは初等関数のときの積分法を直接一般化した手法に基づいている.しかし,多くの場合,被積分関数を特殊な関数で表しておいて,その積分を求めた上で,適当に一般的によく知られている関数に帰着させる方法が取られる.

このベッセル関数を積分するには,一般化された超幾何関数が必要になる.
In[17]:=
Click for copyable input
Out[17]=
式によっては,積分するとより分かりやすい形になる.
In[18]:=
Click for copyable input
Out[18]=

積分の公式を集めた本にはおよそ数千の不定積分が記載されている.Wolfram言語は基本的にそのすべての積分を計算できる.さらに,Wolfram言語には汎用アルゴリズムが備えられているので,特定の問題だけでなく非常に広範囲に渡る積分問題が解けるようにもなっている.

この積分は大きな積分の公式集なら必ず載っている.
In[19]:=
Click for copyable input
Out[19]=
この積分は公式集を参照しただけでは解けない.もっと一般化されたアルゴリズムが必要になる.
In[20]:=
Click for copyable input
Out[20]=

特に,ユーザ定義の数学関数を導入したなら,新しい種類の積分法をWolfram言語に教えておくとよいだろう.これはIntegrateに定義を付け加えることでできる.

微分の計算をする場合,合成関数の微分法を使えば,Wolfram言語のDerivativeを使って標準的な形の関数が得られる.しかし,積分の場合は,そのような標準形がないので,場合によっては同じ積分から得られるいくつかの変形版を特別に定義してやらなければいけない.また,Integrateを使っても,自動的な変数の変換や他の変換操作はなかなかうまくできない.

Wolfram言語に用意されている標準的な数学関数ではこの積分はできない.
In[21]:=
Click for copyable input
Out[21]=
積分用の規則を追加する前にプロテクトを解除しておく.
In[22]:=
Click for copyable input
Out[22]=
この式の積分を例えば「ジョーンズ」(Jones)関数とするユーザ定義の規則を設ける.
In[23]:=
Click for copyable input
実際に積分してみる.Jones関数が使われ答が構成される.
In[24]:=
Click for copyable input
Out[24]=

積分 超幾何関数の無限和かあるいは適当に一般化された二変数のカンペドフェリエ(Kampé de Fériet)超幾何関数を用いて表される.