N维高阶多项式插值

时间:2017-05-23 11:39:25

标签: python interpolation polynomials n-dimensional polynomial-approximations

我正在寻找一些关于我所面临的复杂问题的线索,关于4D空间中的插值。

我有一个由三维空间中的340个点组成的数据集(我有三个变量--A,B,C - 每个由340个元素定义)。每个点由输出变量的特定值标识。所以,通常我有

f(A,B,C)= D

我需要插入数据集,以便预测设计空间中每个点的D值。我做的是写一个小脚本来通过numpy方法获取多项式 m 的系数linalg.lstsq

def polyfit4d(x,y,z, metric, order):
    ncols = (order + 1)**3
    G = np.zeros((x.size, ncols))
    ij = itertools.product(range(order+1), repeat=3)
    for w, (i,j,k) in enumerate(ij):
        G[:,w] = x**i * y**j * z**k

    m, residuals, rank, s = np.linalg.lstsq(G, metric)

    return m, residuals

然后,我使用了一个求值函数来获取设计空间所有点的函数值。

def polyval4d(x, y, z, m):
     string = ''
     order = int(math.ceil(((len(m))**(1/3.0))-1))
     ij = itertools.product(range(order+1), repeat=3)
     f = np.zeros_like(x)
     for a, (i,j,k) in zip(m, ij):
     f += a * x**i * y**j * z**k

     return f

由于我的设计空间是三维的,我将多边形函数传递给三个3D矩阵,其中包含设计空间的所有点X,Y,Z。 f 是输出D的3D矩阵。此矩阵中的每个点都是在设计空间的每个点上计算得到的用于计算多项式的D值(在polyfit中找到)(对于棘手的句子而言)

然后,我将绘制此3D设计空间切片的等高线图。我选择Z的一个值,并绘制由X,Y形成的2D平面,其轮廓水平基于D的值。 问题是结果不是我所期望的。等高线图几乎是相同的颜色,在一个角落有一些变化。

我在互联网上到处搜索,而且Python wiki也建议仅适用于2D情况的功能。 有没有人遇到过这种问题?我在这个N维多项式的评估/定义中是否遗漏了什么?

非常感谢您的关注。

费德里科

0 个答案:

没有答案