Spec-Zone.ru › NumPy 1.12

numpy.polynomial.polynomial.polyfit

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

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

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

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

где n есть deg.

Параметры:

x : array_like, shape (M,)

Координаты x образцов (данных) точек M (x[i], y[i]).

y : array_like, shape (M,) или (M, K)

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

deg : int или 1-мерный array_like

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

rcond : float, необязательно

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

full : bool, необязательно

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

w : array_like, shape (M,), необязательно

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

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

Возвращаемые значения:

coef : ndarray, shape (deg + 1,) или (deg + 1, K)

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

[residuals, rank, singular_values, rcond] : список

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

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

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

Исключения:

RankWarning

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

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

См. также

chebfit, legfit, lagfit, hermfit, hermefit

polyval
Вычисляет полином.
polyvander
Матрица Вандермонда для степеней.
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. Подгонки с использованием полиномов Чебышева или Лежандра обычно лучше обусловлены, но многое может зависеть от распределения образцовых точек и гладкости данных. Если качество подгонки недостаточно, сплайны могут быть хорошей альтернативой.

Примеры

>>> 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)
>>> 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])
>>> stats # note the large SSR, explaining the rather poor results
[array([ 38.06116253]), 4, array([ 1.38446749,  1.32119158,  0.50443316,
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([ -1.73362882e-17,  -1.00000000e+00,  -2.67471909e-16,
         1.00000000e+00])
>>> stats # note the minuscule SSR
[array([  7.46346754e-31]), 4, array([ 1.38446749,  1.32119158,
0.50443316,  0.28853036]), 1.1324274851176597e-014]

© 2008–2017 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.polynomial.polynomial.polyfit.html

Spec-Zone.ru

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