Spec-Zone.ru › NumPy 2.0

numpy.polynomial.polynomial.polyfit

polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)[source]

Наименьшие квадраты подгонка полинома к данным.

Возвращает коэффициенты полинома степени deg, который является наименьшей квадратической подгонкой к значениям данных y, заданным в точках x. Если y является одномерным, возвращаемые коэффициенты также будут одномерными. Если y является двумерным, выполняются несколько подгонок, по одной для каждого столбца y, и получившиеся коэффициенты хранятся в соответствующих столбцах двумерного результата. Подгоняемый(е) полином(ы) имеют вид

\[p(x) = c_0 + c_1 * x + ... + c_n * x^n,\]

где n является deg.

Parameters:
xarray_like, shape (M,)

Координаты x выборочных (данных) точек M.

yarray_like, shape (M,) или (M, K)

Координаты y выборочных точек. Несколько наборов выборочных точек, имеющих одинаковые координаты x, могут быть (независимо) подогнаны с помощью одного вызова polyfit, передавая в y двумерный массив, содержащий один набор данных в каждом столбце.

degint или 1-D array_like

Степень(и) подгоняемых полиномов. Если deg — целое число, в подгонку включаются все члены вплоть до и включая deg-го члена. Для версий NumPy >= 1.11.0 вместо этого можно использовать список целых чисел, указывающих степени членов, которые следует включить.

rcondfloat, optional

Относительное число обусловленности подгонки. Сингулярные значения, меньшие rcond, по отношению к наибольшему сингулярному значению, будут проигнорированы. Значение по умолчанию равно len(x)*eps, где eps — относительная точность плавающей точки платформы, примерно 2e-16 в большинстве случаев.

fullbool, optional

Переключатель, определяющий характер возвращаемого значения. Когда False (значение по умолчанию), возвращаются только коэффициенты; когда True, возвращается также диагностическая информация из сингулярного разложения (используемого для решения матричного уравнения подгонки).

warray_like, shape (M,), optional

Веса. Если не None, вес w[i] применяется к невозведенной остаточной величине y[i] - y_hat[i] в точке x[i]. В идеале веса выбираются таким образом, чтобы ошибки произведений w[i]*y[i] имели одинаковую дисперсию. При использовании взвешивания обратных дисперсий используйте w[i] = 1/sigma(y[i]). Значение по умолчанию — None.

Добавлен в версии 1.5.0.

Returns:
coefndarray, shape (deg + 1,) или (deg + 1, K)

Коэффициенты полинома, упорядоченные от низшей к высшей степени. Если y было двумерным, коэффициенты в столбце k из coef представляют полиномиальную подгонку к данным в y’s столбце k.

[residuals, rank, singular_values, rcond]list

Эти значения возвращаются только если full == True

  • residuals — сумма квадратов остатков наименьших квадратов подгонки
  • rank — численная ранг масштабированной матрицы Вандермонда
  • singular_values — сингулярные значения масштабированной матрицы Вандермонда
  • rcond — значение rcond.

Для получения дополнительной информации см. numpy.linalg.lstsq.

Raises:
RankWarning

Выдаётся, если матрица в наименьших квадратах подгонки имеет недостающий ранг. Предупреждение выдаётся только если full == False. Предупреждения можно отключить с помощью:

>>> import warnings
>>> warnings.simplefilter('ignore', np.exceptions.RankWarning)

См. также

numpy.polynomial.chebyshev.chebfit
numpy.polynomial.legendre.legfit
numpy.polynomial.laguerre.lagfit
numpy.polynomial.hermite.hermfit
numpy.polynomial.hermite_e.hermefit
polyval

Вычисляет значение полинома.

polyvander

Матрица Вандермонда для степеней.

numpy.linalg.lstsq

Вычисляет подгонку наименьших квадратов из матрицы.

scipy.interpolate.UnivariateSpline

Вычисляет сплайновые подгонки.

Примечания

Решение — это коэффициенты полинома p, который минимизирует сумму взвешенных квадратов ошибок

\[E = \sum_j w_j^2 * |y_j - p(x_j)|^2,\]

где \(w_j\) — веса. Эта задача решается путём задания (обычно) переопределённого матричного уравнения:

\[V(x) * c = w * y,\]

где V — взвешенная псевдоматрица Вандермонда x, c — искомые коэффициенты, w — веса, а y — наблюдаемые значения. Это уравнение затем решается с помощью сингулярного разложения V.

Если некоторые сингулярные значения V настолько малы, что ими можно пренебречь (и full == False), будет выдано предупреждение RankWarning. Это означает, что значения коэффициентов могут быть плохо определены. Подгонка к полиному меньшей степени обычно устраняет предупреждение (но, возможно, это не то, что вы хотите; если у вас есть независимые причины для выбора степени, которая не работает, вам, возможно, придётся: a) пересмотреть эти причины и/или b) пересмотреть качество ваших данных). Параметр rcond также может быть установлен на значение, меньшее, чем по умолчанию, но полученная подгонка может быть ложной и иметь большие вклады от погрешности округления.

Полиномиальные подгонки с двойной точностью, как правило, «не работают» примерно при степени 20. Подгонки с использованием рядов Чебышева или Лежандра обычно лучше обусловлены, но многое может зависеть от распределения выборочных точек и гладкости данных. Если качество подгонки недостаточно, сплайны могут быть хорошей альтернативой.

Примеры

>>> np.random.seed(123)
>>> from numpy.polynomial import polynomial as P
>>> x = np.linspace(-1,1,51)  # x "data": [-1, -0.96, ..., 0.96, 1]
>>> y = x**3 - x + np.random.randn(len(x))  # x^3 - x + Gaussian noise
>>> c, stats = P.polyfit(x,y,3,full=True)
>>> np.random.seed(123)
>>> c # c[0], c[2] should be approx. 0, c[1] approx. -1, c[3] approx. 1
array([ 0.01909725, -1.30598256, -0.00577963,  1.02644286])  # may vary
>>> stats # note the large SSR, explaining the rather poor results
 [array([ 38.06116253]), 4, array([ 1.38446749,  1.32119158,  0.50443316, # may vary
          0.28853036]), 1.1324274851176597e-014]

То же самое без добавленного шума

>>> y = x**3 - x
>>> c, stats = P.polyfit(x,y,3,full=True)
>>> c # c[0], c[2] should be "very close to 0", c[1] ~= -1, c[3] ~= 1
array([-6.36925336e-18, -1.00000000e+00, -4.08053781e-16,  1.00000000e+00])
>>> stats # note the minuscule SSR
[array([  7.46346754e-31]), 4, array([ 1.38446749,  1.32119158, # may vary
           0.50443316,  0.28853036]), 1.1324274851176597e-014]

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.polynomial.polynomial.polyfit.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API