numpy.polynomial.polynomial.polyfit
-
polynomial.polynomial.polyfit(x, y, deg, rcond=None, full=False, w=None)[source] -
Наименьшие квадраты для подгонки многочлена к данным.
Возвращает коэффициенты многочлена степени
deg, являющегося наилучшей аппроксимацией методом наименьших квадратов к значениям данныхy, заданным в точкахx. Еслиyявляется одномерным, возвращаемые коэффициенты также будут одномерными. Еслиyявляется двумерным, выполняется несколько подгонок, по одной для каждого столбцаy, и полученные коэффициенты хранятся в соответствующих столбцах двумерного результата. Подгоняемый(е) многочлен(ы) имеют видгде
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= Trueresid – сумма квадратов остатков наименьших квадратов. 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, который минимизирует сумму взвешенных квадратов ошибокгде
— веса. Эта проблема решается путем составления (как правило) переопределённого матричного уравнения:
где
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