積分の数値解析

N[Integrate[expr,{x,xmin,xmax}]]厳密に積分を求め,その後に積分の値を数値近似する
NIntegrate[expr,{x,xmin,xmax}]数値解析で積分を求める
NIntegrate[expr,{x,xmin,xmax},{y,ymin,ymax},...]
数値解析で多重積分 を計算する
NIntegrate[expr,{x,xmin,x1,x2,...,xmax}]
から の各点を通って に至る線に沿って数値積分する

数値積分の関数

積分 を数値近似する.
In[1]:=
Click for copyable input
Out[1]=
二重積分 を数値近似する.
In[2]:=
Click for copyable input
Out[2]=

NIntegrateの重要な機能のひとつに,既知の点で発散するような関数に対処できることがある.NIntegrateでは積分領域の両端についてこのような問題が起らないか自動的に判定が行われるようになっている.

関数の点で発散してしまう.それでも,NIntegrateを使うと,正確に積分してくれる.
In[3]:=
Click for copyable input
Out[3]=
の積分は厳密に求めることも可能である.
In[4]:=
Click for copyable input
Out[4]=
において が特異点を持つことをNIntegrateは検知し,積分不能なことが判明する.
In[5]:=
Click for copyable input
Out[5]=

NIntegrateは,積分領域および被積分関数の区分関数(PiecewiseAbs等)により定義されるすべての部分領域の終点における特異点を自動的に検知しようとする.したがって,両端以外に特異点が存在する場合,NIntegrateの返す答は正しくない可能性がある.それでも,適応化の中でNIntegrateが特異点を検出できるときがある.そのようなときは,警告が発せられる.

NIntegrateは,積分区間にある特異点のために問題が起る可能性があるということを警告してくれる.求まる答は数値的に極めて正解に近い.
In[6]:=
Click for copyable input
Out[6]=

もし,積分する関数がどこで特異点を持つかあらかじめ判明していれば,NIntegrateにそのことを伝え,適切な処置を取るように指示することができる.NIntegrate[expr, {x, xmin, x1, x2, ..., xmax}]とすると, から の区間にある各中間点 において特異点が存在する可能性があるとして式 expr の積分が行われる.

再度計算する.今度は,に特異点があることを指示してあるので,正しい答が求まる.
In[7]:=
Click for copyable input
Out[7]=

また,NIntegrateに複素平面上の積分路を表す中間点 のリストを与えることもできる.この場合,積分路は から始まり を通って で終る折れ線区間からなるとみなされる.

を始点とし を順に通り,を終点とした複素平面上の閉じた積分路において を積分する.
In[8]:=
Click for copyable input
Out[8]=
コーシーの定理から分かるように,この積分は になる.
In[9]:=
Click for copyable input
Out[9]=
オプション
デフォルト値
MinRecursion0積分法の再帰の最小回数
MaxRecursionAutomatic積分法の再帰の最大回数
MaxPointsAutomatic積分式のサンプリングの最大合計回数

NIntegrateの特別オプション

NIntegrateで数値積分すると,積分式が一連の点でサンプリングされる.その際に特定の領域で積分式に急激な変化が認められると,その領域は細分化され,サンプリングが再帰的に行われ,それと同時にサンプリング点の数が増やされる.パラメータMaxRecursionを使い,再帰の最大・最小回数が指定できる.の値を増やせば,NIntegrateにおけるサンプリング点の数が必ず増えるようになる.MaxRecursionは,NIntegrateが使うサンプリング点の数の上限を決定する.またはMaxRecursionの値を高く取ると,NIntegrateの計算時間が余計にかかるようになる.

NIntegrateのオプション設定はすべてデフォルト値のままにしておき,を数値積分する.近傍のピークが見逃され,答は間違いになってしまう.
In[10]:=
Click for copyable input
Out[10]=
のオプション設定をして再度積分してみる.NIntegrateは,十分な数のサンプリングを行い,近傍のピークを検出する.しかし,MaxRecursionがデフォルト値なので,NIntegrateはサンプリング点が足りず正確な答が得られない.
In[11]:=
Click for copyable input
Out[11]=
MaxRecursionをこのように設定すると,NIntegrateは十分な精度で積分を求める.
In[12]:=
Click for copyable input
Out[12]=
別の解き方として,特にピーク近傍が細分化するように積分領域を分割してからNIntegrateする,という方法もある.
In[13]:=
Click for copyable input
Out[13]=

多次元の積分をNIntegrateで計算すると,非常に長い時間がかかるときがよくある.そのようなときは,オプションを小さい値に設定しNIntegrateで限られたサンプリングを行うようにすることで,推定的な積分値を求めるようにしたらよいだろう.

計算に時間のかかる積分でおおよその推定値を得る方法である.
In[14]:=
Click for copyable input
Out[14]=
New to Mathematica? Find your learning path »
Have a question? Ask support »