NUMERICAL CALCULUS パッケージ チュートリアル

数値計算パッケージ

コンテキストで定義されている関数は,微積分関係の問題の数値解を見付けるサポートを提供する.

パッケージをロードする.
In[1]:=
Click for copyable input

極限の数値計算

組込み関数Limitは記号的・解析的方法を使って極限を計算する.NumericalCalculusパッケージに含まれている関数NLimitは,引数が指定した点に近付くときの関数値の短い列を数値的に評価することで作用する.この計算の結果は,極限の近似を求めるためにウィン(Wynn)のイプシロン()法か,一般化されたオイラー(Euler)変換を用いるルーチンに渡される.

NLimit[expr,x->x0]xに近付く際の極限を数値的に求める

数値的な極限を求める

極限を数値的に計算する.
In[2]:=
Click for copyable input
Out[2]=
極限でオイラーガンマとして知られる数が得られる.
In[3]:=
Click for copyable input
Out[3]=
が無限大に近付く際の極限を計算することもできる.
In[4]:=
Click for copyable input
Out[4]=
オプション名
デフォルト値
WorkingPrecisionMachinePrecision使用する精度桁数
Scale1最初の刻み幅
Terms7列で生成された項の総数
MethodEulerSum評価法.EulerSum
WynnDegree1ウィンのメソッドで用いる度数

NLimitのオプション

級数の収束を速めるための特別な技法は数多くある.収束が速いということは,数値評価において所望の確度の結果を得るための項数が少なくてもよいことを意味する.EulerSumで使われているオイラー変換はこのような技法のひとつである.

EulerSumは交代級数と項が という形を持つ級数(ここで の多項式である)に特に有効である.これは組込み関数のNSumの有効な補助手段であり,一般的なアルゴリズムで効果的になるように設計されている.

EulerSum[f,{i,imin,Infinity}]オイラー変換を使って を数値的に評価する

オイラー変換を用いた和の数値評価

オプション名
デフォルト値
WorkingPrecisionMachinePrecision使用する精度桁数
Terms5外挿前に生成される項の総数
ExtraTerms7外挿プロセスで用いる項数.最低でも2
EulerRatioAutomatic変換に用いる固定比率

EulerSumのオプション

次はEulerSumを使って交代級数の和の数値近似を計算する.
In[5]:=
Click for copyable input
Out[5]=
精度と項数を増やしても,小数点以下6桁までの値は変わらない.これを使って数値的に計算した結果の確度を検証することができる.
In[6]:=
Click for copyable input
Out[6]=
計算結果はよく知られている正確な結果に大変近い.
In[7]:=
Click for copyable input
Out[7]=

関数の導関数を解析的に計算するのが困難だったり不可能っだったりすることがある.そのような場合には,組込み関数Dの代りに関数NDを使って導関数を計算するとよい.

ND[f,x,x0] で評価された の数値近似を与える
ND[f,{x,n},x0]n 導関数を与える

導関数の数値計算

次は における の導関数の数値近似である.
In[8]:=
Click for copyable input
Out[8]=
オプションTermsの設定を大きくした後では,三次導関数を記号的に計算した結果と数値的に計算した結果の差は極めて小さくなる.
In[9]:=
Click for copyable input
Out[9]=
次はコーシー(Cauchy)の積分公式を使った数値導関数における誤差である.
In[10]:=
Click for copyable input
Out[10]=
オプション名
デフォルト値
WorkingPrecisionMachinePrecision使用する精度桁数
Scale1評価に使用する刻み幅
Terms7列で生成される項の総数
MethodEulerSumEulerSum(商差の数値的限界)かNIntegrate(コーシーの積分公式)のどちらかの評価法

NDのオプション

EulerSumNLimitNDに使用されるアルゴリズムは,不可解な例題が多ければ誤った答えを与えることがあるので注意が必要である.ほとんどの場合,オプション設定の変更に対する敏感さで答をテストすることができる.

留数の数値解析

Wolfram言語の関数Residueは,複素平面上の点における式の留数を記号的に求める.本来記号的なものなので,結果が得られないこともある.

NResidueResidueの数値バージョンである.この関数は留数を求める点を中心とした小さな円の周りを数値的に積分する.このアプローチの明らかな欠点は,これが実際には円の中に含まれるすべての点の留数の和を求めてしまう点である.円の半径を十分に小さく取ることで,問題としているもの以外のすべての特異点を除くことができる.

NResidue[expr,{x,x0}]において expr の留数を数値的に求める

留数の数値評価

Radius積分する円の半径を指定する
PrecisionGoalNIntegrateで用いるPrecisionGoal
WorkingPrecisionNIntegrateで用いるWorkingPrecision

NResidueのオプション

始点における の留数を求める.
In[2]:=
Click for copyable input
Out[2]=
求める留数を含む式を定義する.
In[3]:=
Click for copyable input
Out[3]=
留数を求める.厳密に言うと,において特異点を持たないが,1.7の非常に近くで特異点を持つ.
In[4]:=
Click for copyable input
Out[4]=
留数を数値的に求める.
In[5]:=
Click for copyable input
Out[5]=
次は留数を求めるまた別の方法である.
In[6]:=
Click for copyable input
Out[6]=

級数展開の数値解析

Wolfram言語の関数Seriesは,導関数を評価することで任意の点における関数のベキ級数展開を求める.しかし,級数の数値近似のみが必要で,導関数を評価するのは難しい場合がある.NDを用いて導関数を評価することもできるが,これは各導関数で繰返しが多い作業である(すなわち,関数自体を複数の点で評価しなければならない).関数が解析的であり複素平面上で評価することが可能であれば,NSeriesを使用することで問題は解決する.

NSeries[f,{x,x0,n}]付近において項 から までを含む f の級数展開を数値的に近似する

級数展開を数値的に求める

NSeriesはまず,展開点を中心とする円上の離散点で関数を評価する.次にInverseFourierを用いて,その各々を円の周囲で積分するには取るにたらない直交基底関数の和として表す.コーシーの積分公式により,InverseFourierは基本的に必要とされてる級数係数を与えると思われる.NSeriesがすべてをやってくれるので追加的な操作は殆ど必要ない.これはコーシーの積分公式に基づいているので,サンプル点の円内で関数の特異点が発生しないように注意する必要がある.

オプション名
デフォルト値
WorkingPrecisionMachinePrecision計算で使う算術の精度
Radius1関数のサンプルを取る円の半径

NSeriesのオプション

始点付近におけるの級数展開の近似を与える.NSeriesは本来ゼロとなるべき小さな数を認識できない点に注意のこと.
In[2]:=
Click for copyable input
Out[2]=
ChopRationalizeを使うと結果が整理できることが多い.
In[3]:=
Click for copyable input
Out[3]=
半径が小さすぎると,約分が問題となる.
In[4]:=
Click for copyable input
Out[4]=
WorkingPrecisionを大きくすると,この問題が解決できることがよくある.
In[5]:=
Click for copyable input
Out[5]=
半径が大きすぎるとサンプルの点が散らばりすぎて,極点が存在するように見え始める.
In[6]:=
Click for copyable input
Out[6]=
NSeriesは極点も認識する.
In[7]:=
Click for copyable input
Out[7]=