N-мерная полиномиальная интерполяция высокого порядка

Я ищу некоторые подсказки о сложной проблеме, с которой я сталкиваюсь, касающейся интерполяции в четырехмерном пространстве.

У меня есть набор данных, состоящий из 340 точек в трехмерном пространстве (у меня есть три переменные - A, B, C - каждая из которых определяется 340 элементами). Каждая точка идентифицируется определенным значением выходной переменной. Итак, как правило, у меня есть

f(A,B,C) = D

Мне нужно интерполировать набор данных, чтобы предсказать значение D для каждой точки в области проектирования. Я написал небольшой скрипт для получения коэффициентов полинома m с помощью метода numpy 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

Поскольку мое пространство проектирования является трехмерным, я передал поливальной функции три трехмерных матрицы со всеми точками X,Y,Z пространства проектирования. F является трехмерной матрицей выходных данных D. Каждая точка в этой матрице представляет собой значение D, вычисленное с использованием полинома, найденного с помощью polyfit, в каждой точке проектного пространства (извините за хитрое предложение).

То, что я делаю, - это построение контурного графика фрагмента этого пространства трехмерного дизайна. Я выбираю одно значение Z и строю 2D-плоскость, образованную X, Y, с уровнями контуров на основе значений D. Проблема в том, что результат не тот, который я ожидаю. Контурная диаграмма почти одного цвета с некоторыми вариациями в одном углу.

Я искал повсюду в Интернете, а также вики Python предлагает функции, которые работают только для 2D-случая. Кто-нибудь когда-нибудь сталкивался с такой проблемой? Я что-то упускаю в оценке / определении этого N-мерного полинома?

Большое спасибо за ваше внимание.

Federico

0 ответов

Другие вопросы по тегам