python 精度更高

higher precision in python

我是 运行 一些使用 numpyscipymathpython v3.3.2 脚本。我怀疑我的计算存在数值精度问题,我想提高我编写的某些特定模块的精度,看看它是否会对最终结果产生影响。在我的模块中,我使用了一些代数运算和 numpy.sqrt.

如何在我已经编写的模块中操纵计算精度?(我可以修改它)。我看到有几个模块可用,例如 decimalmpmath 以及 bigfloat,我试图从文档中找出哪个更适合我的任务。第一个已经安装,我应该安装另外两个。理想情况下,我想在模块顶部编写一个命令并指定我在该模块中需要的精度,是否存在类似的东西?

编辑 --------

我认为问题可能出在二阶导数的计算上:

def secondderivative(x,y):
  xl     = np.roll(x,1) # x1
  xr     = np.roll(x,-1)# x3
  yl     = np.roll(y,1)
  yr     = np.roll(y,-1)

  ind    = np.where(np.isnan(y) | np.isnan(yl) | np.isnan(yr) )[0]

  deriv2 = (2 * yl / ((x - xl)  * (xr - xl))
        - 2 * y  / ((xr - x)  * (x - xl))
        + 2 * yr / ((xr - xl) * (xr - x)))

  for i in ind:
    deriv2[i] = np.nan

  deriv2[0]             = np.nan
  deriv2[len(deriv2)-1] = np.nan
  return deriv2

我看到梯度的结果完全不同:

np.gradient(np.gradient(y,x),x)

当您的代码基于 numpy/scipy 和 co. 时,您只能使用这些库支持的类型。这是 overview.

段落 Extended precision 与您相关。

将 numpy/scipy 与 decimal、mpmath 和 co 相结合。需要做很多工作(在一般情况下)!

如果显示一些代码以便人们可以猜到发生了什么,那就更明智了。即使精度有限,也有一些技术可以发挥作用:例如iterative-refinement in solving linear systems.