NUMERICAL CALCULUS パッケージ チュートリアル
数値計算パッケージ
コンテキストで定義されている関数は,微積分関係の問題の数値解を見付けるサポートを提供する.
極限の数値計算
組込み関数Limitは記号的・解析的方法を使って極限を計算する.NumericalCalculusパッケージに含まれている関数NLimitは,引数が指定した点に近付くときの関数値の短い列を数値的に評価することで作用する.この計算の結果は,極限の近似を求めるためにウィン(Wynn)のイプシロン(
)法か,一般化されたオイラー(Euler)変換を用いるルーチンに渡される.
| NLimit[expr,x->x0] | x が に近付く際の極限を数値的に求める |
数値的な極限を求める
| Out[2]= |  |
| Out[3]= |  |

が無限大に近付く際の極限を計算することもできる.
| Out[4]= |  |
NLimitのオプション
級数の収束を速めるための特別な技法は数多くある.収束が速いということは,数値評価において所望の確度の結果を得るための項数が少なくてもよいことを意味する.EulerSumで使われているオイラー変換はこのような技法のひとつである.
EulerSumは交代級数と項が
という形を持つ級数(ここで
は
の多項式である)に特に有効である.これは組込み関数のNSumの有効な補助手段であり,一般的なアルゴリズムで効果的になるように設計されている.
オイラー変換を用いた和の数値評価
EulerSumのオプション
| Out[5]= |  |
精度と項数を増やしても,小数点以下6桁までの値は変わらない.これを使って数値的に計算した結果の確度を検証することができる.
| Out[6]= |  |
| Out[7]= |  |
関数の導関数を解析的に計算するのが困難だったり不可能っだったりすることがある.そのような場合には,組込み関数Dの代りに関数NDを使って導関数を計算するとよい.
| ND[f,x,x0] | 点 で評価された の数値近似を与える |
| ND[f,{x,n},x0] | 第 n 導関数を与える |
導関数の数値計算
次は

における

の導関数の数値近似である.
| Out[8]= |  |
オプション
Termsの設定を大きくした後では,三次導関数を記号的に計算した結果と数値的に計算した結果の差は極めて小さくなる.
| Out[9]= |  |
次はコーシー(Cauchy)の積分公式を使った数値導関数における誤差である.
| Out[10]= |  |
NDのオプション
EulerSum,NLimit,NDに使用されるアルゴリズムは,不可解な例題が多ければ誤った答えを与えることがあるので注意が必要である.ほとんどの場合,オプション設定の変更に対する敏感さで答をテストすることができる.
留数の数値解析
Mathematica の関数Residueは,複素平面上の点における式の留数を記号的に求める.本来記号的なものなので,結果が得られないこともある.
NResidueはResidueの数値バージョンである.この関数は留数を求める点を中心とした小さな円の周りを数値的に積分する.このアプローチの明らかな欠点は,これが実際には円の中に含まれるすべての点の留数の和を求めてしまう点である.円の半径を十分に小さく取ることで,問題としているもの以外のすべての特異点を除くことができる.
| NResidue[expr,{x,x0}] | 点 において expr の留数を数値的に求める |
留数の数値評価
NResidueのオプション
始点における

の留数を求める.
| Out[2]= |  |
| Out[3]= |  |
留数を求める.厳密に言うと,

は

において特異点を持たないが,1.7の非常に近くで特異点を持つ.
| Out[4]= |  |
| Out[5]= |  |
| Out[6]= |  |
級数展開の数値解析
Mathematica の関数Seriesは,導関数を評価することで任意の点における関数のベキ級数展開を求める.しかし,級数の数値近似のみが必要で,導関数を評価するのは難しい場合がある.NDを用いて導関数を評価することもできるが,これは各導関数で繰返しが多い作業である(すなわち,関数自体を複数の点で評価しなければならない).関数が解析的であり複素平面上で評価することが可能であれば,NSeriesを使用することで問題は解決する.
| NSeries[f,{x,x0,n}] | 付近において項 から までを含む f の級数展開を数値的に近似する |
級数展開を数値的に求める
NSeriesはまず,展開点を中心とする円上の離散点で関数を評価する.次にInverseFourierを用いて,その各々を円の周囲で積分するには取るにたらない直交基底関数の和として表す.コーシーの積分公式により,InverseFourierは基本的に必要とされてる級数係数を与えると思われる.NSeriesがすべてをやってくれるので追加的な操作は殆ど必要ない.これはコーシーの積分公式に基づいているので,サンプル点の円内で関数の特異点が発生しないように注意する必要がある.
NSeriesのオプション
始点付近における

の級数展開の近似を与える.
NSeriesは本来ゼロとなるべき小さな数を認識できない点に注意のこと.
| Out[2]= |  |
| Out[3]= |  |
| Out[4]= |  |
| Out[5]= |  |
半径が大きすぎるとサンプルの点が散らばりすぎて,極点が存在するように見え始める.
| Out[6]= |  |
| Out[7]= |  |