python中的精度更高

时间:2017-07-28 13:33:38

标签: python-3.x numpy scipy precision scientific-computing

我正在运行一些使用pythonnumpy以及scipy的{​​{1}}个v3.3.2脚本。我怀疑在我的计算中存在数值精度问题,我想提高我编写的某些特定模块的精度,看看它是否会对最终结果产生影响。在我的模块中,我使用了一些代数操作和math

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

编辑---------

我认为问题可能来自二阶导数的计算:

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

1 个答案:

答案 0 :(得分:2)

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

Extended precision段将与您相关。

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

显示一些代码会更加明智,以便人们可以猜出发生了什么。即使精度有限,也有一些技术会产生影响:例如: iterative-refinement in solving linear systems