|
3.9.9 発展:結果精度のコントロール
NDSolveやNMinimizeのような数値操作を行う場合,Mathematicaはデフォルトにより機械数を使う.しかし,オプションWorkingPrecision -> nとすることでn桁精度の任意精度数が使えるようになる.
これは数値積分を機械精度で計算する.
In[1]:= NIntegrate[Sin[Sin[x]], {x, 0, 1}]
Out[1]= 
これは30桁の任意性度数で計算する.
In[2]:= NIntegrate[Sin[Sin[x]], {x, 0, 1}, WorkingPrecision -> 30]
Out[2]= 
WorkingPrecisionを設定すると,これは通常計算結果の精度の上限を定義する.しかし,この制約条件内でMathematicaに目標精度と目標確度を指示することができる.多くの数値操作において目的精度と目的確度を数桁大きくするだけではるかに長い計算時間がかかるようになることは理解しておいた方がよい.それでもなお,高精度・高確度が確実に達成できることが重要な場合も多い.

精度と確度のコントロールオプション
これは25桁精度の結果を与える.
In[3]:= NIntegrate[Sin[Sin[x]], {x, 0, 1}, WorkingPrecision -> 30, PrecisionGoal -> 25]
Out[3]= 
機械精度が30桁では50桁精度は達成できない.
In[4]:= NIntegrate[Sin[Sin[x]], {x, 0, 1}, WorkingPrecision -> 30, PrecisionGoal -> 50]

Out[4]= 
WorkingPrecisionを特定の値に設定するときは,Mathematicaにおける数値操作のための各関数がPrecisionGoalとAccuracyGoalに特定のデフォルト設定を使っていなければならない.その典型的な例はNDSolveである.NDSolveではデフォルト設定はWorkingPrecisionにおける設定値の半分になっている.
目標精度と目標確度の両方が返される最終結果とそれらのさまざまなノルムや誤差推定に適用される.Mathematicaにおける数値操作の関数は通常指定の目標精度あるいは目標確度のどちらか一方に達した段階で結果を返す.どちらかの設定値がInfinityの場合はそうではない方だけが考慮される.
N[expr, n]で通常の数値評価を行う場合,Mathematicaは結果がn桁精度に達するように自動的に内部計算を調整する.しかし関数の数値操作を行う場合,実際にはWorkingPrecision とPrecisionGoalをもっと明示的に指定する必要があるのが普通である.
|