控制结果的精度

在进行数值操作如 NDSolveNMinimize 时,Wolfram 语言默认地使用机器精度数. 但是通过设置选项 WorkingPrecision->n 用户可以使用任意 n 位精度的数字.

这里进行数值积分的机器精度数的计算.
In[1]:=
Click for copyable input
Out[1]=
这里进行使用30位任意精度数进行计算.
In[2]:=
Click for copyable input
Out[2]=

如果用户对 WorkingPrecision 给出设置,这就通常定义了计算所得结果的精度的上限. 但是在这个约束条件下,用户可以告诉 Wolfram 语言自己想要达到的精度和准确度为多少. 用户应该意识到对于许多不同种的数值操作,如果只对精度目标和准确度目标增加小数目的数位,通常会大幅度地增加计算时间. 然而,在许多情况下,确保获得高精度和准确度是很重要的.

WorkingPrecision内部计算中保持的精度位数
PrecisionGoal尝试获得的精度的位数
AccuracyGoal尝试获得的准确度的位数

控制精度和准确度的选项.

这里给出具有25位精度的结果.
In[3]:=
Click for copyable input
Out[3]=
使用30位工作精度不能达到50位精度.
In[4]:=
Click for copyable input
Out[4]=

给定 WorkingPrecision 的特殊设置,在 Wolfram 语言中数值操作的每个函数对 PrecisionGoalAccuracyGoal 使用某种默认设置. 典型情况是 NDSolve,其中这些默认设置相当于对 WorkingPrecision 给定的设置的一半大小.

精度和准确度目标通常可以应用于返回的最终结果和关于它们的不同范数或误差估计. 在 Wolfram 语言中数值操作的函数通常不断尝试修订结果,直到达到指定的精度目标或准确度目标为止. 如果这两个目标之一设置为 Infinity,那么只考虑另一个目标.

在使用 N[expr,n] 进行普通数值计算时,Wolfram 语言自动调整内部计算以在结果中达到 n 位精度. 但是在对函数进行数值操作时,实际上经常需要更加明确地指明 WorkingPrecisionPrecisionGoal.