полиномиальная посадка - PullRequest
1 голос
/ 29 марта 2010

Как мне подогнать 2D-поверхность z=f(x,y) с полиномом от numpy с полными перекрестными членами?

Ответы [ 2 ]

7 голосов
/ 30 марта 2010

Это по своей природе плохо обусловлено численно, но вы могли бы сделать что-то вроде этого:

import numpy as np

x = np.random.randn(500)
y = np.random.randn(500)
z = np.random.randn(500) # Dependent variable

v = np.array([np.ones(500), x, y, x**2, x * y, y**2])

coefficients, residues, rank, singval = np.linalg.lstsq(v.T, z)

Чем больше терминов вы добавите, тем хуже станет численно.Вы уверены, что хотите полиномиальный интерполант?

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

0 голосов
/ 24 августа 2018

Вы можете использовать комбинацию polyvander2d и polyval2d, но вам нужно будет выполнить подгонку самостоятельно, используя выходную матрицу проектирования из polyvander2d, возможно, включающую масштабирование и тому подобное. Должна быть возможность построить класс Polynomial2d из этих инструментов.

...