Spec-Zone.ru › NumPy 1.21

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.

Параметры
xarray_like, форма (M,)

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

yarray_like, форма (M,) или (M, K)

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

degint или 1-D array_like

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

rcondfloat, необязательно

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

fullbool, необязательно

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

warray_like, форма (M,), необязательно

Веса. Если не None, вклад каждой точки (x[i],y[i]) в подгонку взвешивается с помощью w[i]. В идеале веса выбираются так, чтобы погрешности произведений w[i]*y[i] имели одинаковую дисперсию. Значение по умолчанию — None.

Введено в версии 1.5.0.

Возвращает
coefndarray, форма (deg + 1,) или (deg + 1, K)

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

[residuals, rank, singular_values, rcond]list

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

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

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

Возбуждает
RankWarning

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

>>> import warnings
>>> warnings.simplefilter('ignore', np.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. Это означает, что значения коэффициентов могут быть плохо определены. Подгонка к многочлену более низкой степени, как правило, устраняет предупреждение (но, возможно, это не то, что вы хотите; если у вас есть независимые причины для выбора степени, которая не работает, вам может потребоваться: а) пересмотреть эти причины и/или б) пересмотреть качество ваших данных). Параметр 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 + N(0,1) "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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.polynomial.polynomial.polyfit.html

Spec-Zone.ru

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