我正在运行一些使用python
和numpy
以及scipy
的{{1}}个v3.3.2脚本。我怀疑在我的计算中存在数值精度问题,我想提高我编写的某些特定模块的精度,看看它是否会对最终结果产生影响。在我的模块中,我使用了一些代数操作和math
。
如何操作已经由我编写的模块中的计算精度?(我可以修改它)。我已经看到有几个模块可用,例如numpy.sqrt
和decimal
以及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
答案 0 :(得分:2)
当您的代码基于numpy / scipy和co。时,您只能使用这些库支持的类型。这是overview。
Extended precision段将与您相关。
将numpy / scipy与decimal,mpmath和co结合使用。需要做很多工作(一般情况下)!
显示一些代码会更加明智,以便人们可以猜出发生了什么。即使精度有限,也有一些技术会产生影响:例如: iterative-refinement in solving linear systems