内插数据的2D正交

时间:2016-11-14 15:20:23

标签: python numpy scipy interpolation

我有一个数组Q,表示在2D网格上定义的模拟结果,其笛卡尔网格点在两个数组XY上可用(这些都是2D数组相同的形状)。我还有一个函数Qexact,它定义了模拟的精确解。这是两个参数xy的函数,它返回给定位置的精确解的值。该函数可以在标量和numpy数组上工作。

由于我正在使用不同的网格间距测试模拟,因此我使用公共网格X_commonY_common,并在此网格上双线性插入我的解Q。我使用函数scipy.interpolate.interpn这样做。我从这里减去确切的解,我取结果的绝对值,得到在这个常见的笛卡尔网格上定义的绝对误差。

我想将此结果现在整合到我的域中。我计划使用scipy.integrate.dblquad。问题是我的集成函数应返回的值是使用插值计算的。

换句话说,我的集成功能可以实现如下:

def func(y, x):
    '''Returns the absolute error at the position (x, y)'''

    # Interpolate the global array `Q` at position (x, y)
    # The list `points` is a global variable holding the
    # values of the grid on which `Q` is defined
    xy = np.array([[x, y]])
    Qval = scipy.interpolation.interpn(points, Q, xy)

    # Compute reference value of Q at the requested position
    # By using the exact solution
    Qref = Qexact(x, y)

    # Return absolute error
    # (Remark: I could have to extract the only value
    # out of the ndarray)
    return abs(Qref - Qval)

这个问题是我必须为scipy.integration.dblquad使用的每个点调用一次插值函数。我怀疑这可能非常昂贵,而不是只用一个大数组xy调用它来一次性获取所有需要的值。

问题是:上面显示的原型方法是否会比理想方法慢得多,其中插值所需的所有点都是一次计算的?

相关问题是:实施此集成的最有效方法是什么?

0 个答案:

没有答案