如何增加正则网格插值器的精度

时间:2019-05-16 11:19:48

标签: numpy datagrid interpolation gradient hdf5

我在常规网格上创建了​​一个分析函数的h5文件。为了获得该函数的导数,我在这里使用了numpy.gradient。但是问题是我在这里的Regulargridinterpolator的结果非常差,特别是对于梯度的插值。我已经将我从Regulargridinterpolator中找到的结果与分析结果进行了比较,并且误差相当大。如何从Regulargridinterpolator中获得更好的精度,或者哪个插值器为3D常规网格数据提供更好的精度?

我已经创建了这样的h5文件:

import numpy as np
from numpy import gradient
import h5py
from scipy.interpolate import RegularGridInterpolator


def f(x,y,z):
    return ( -1 / np.sqrt(x**2 + y**2 + z**2))

#grid
x = np.linspace(0, 100, 32)  # since the boxsize is 320 Mpc/h
y = np.linspace(0, 100, 32)
z = np.linspace(0, 100, 32)


mesh_data = phi_an(*np.meshgrid(x, y, z, indexing='ij', sparse=True))


#create h5 file
h5file = h5py.File('analytic.h5', 'w')
h5file.create_dataset('/x', data=x)
h5file.create_dataset('/y', data=y)
h5file.create_dataset('/z', data=z)
h5file.create_dataset('/mesh_data', data=mesh_data)

h5file.close()

,插值代码如下:

interpolator_f = RegularGridInterpolator((x, y, z), data[...])
interpolator_df_dx = RegularGridInterpolator((x, y, z), np.gradient(data[...], 100.0/32.0, axis=0))

0 个答案:

没有答案