Spec-Zone.ru › NumPy 1.20

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, shape (M,)

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

yarray_like, shape (M,) or (M, K)

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

degint or 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, вклад каждой точки (x[i],y[i]) в подгонку взвешивается на w[i]. В идеале веса выбираются таким образом, чтобы ошибки продуктов w[i]*y[i] имели одинаковую дисперсию. Значение по умолчанию равно None.

Новое в версии 1.5.0.

Возвращает
coefndarray, shape (deg + 1,) or (deg + 1, K)

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

[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. Это означает, что значения коэффициентов могут быть плохо определены. Подгонка к многочлену более низкой степени обычно устранит предупреждение (но может быть не тем, что вам нужно; если у вас есть независимые причины для выбора степени, которая не работает, вам может потребоваться: 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 + 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.polynomial.polynomial.polyfit.html

Spec-Zone.ru

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