Spec-Zone.ru › NumPy 1.21

numpy.polynomial.hermite.hermfit

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

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

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

\[p(x) = c_0 + c_1 * H_1(x) + ... + c_n * H_n(x),\]

где n равно deg.

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

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

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

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

degint или 1-D array_like

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

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

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

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

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

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

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

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

Коэффициенты Эрмита, упорядоченные от меньшего к большему. Если y было двумерным, коэффициенты данных в столбце k из y находятся в столбце 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.polynomial.polyfit
numpy.polynomial.hermite_e.hermefit
hermval
hermvander
hermweight
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 настолько малы, что они игнорируются, то выводится предупреждение RankWarning. Это означает, что значения коэффициентов могут быть плохо определены. Обычно, использование подгонки меньшей степени устранит предупреждение. Параметр rcond также можно установить на значение, меньшее его значения по умолчанию, но полученная подгонка может быть ложной и иметь большие вклады от ошибок округления.

Подгонки, использующие ряд Эрмита, вероятно, наиболее полезны, когда данные могут быть аппроксимированы sqrt(w(x)) * p(x), где w(x) — вес Эрмита. В этом случае вес sqrt(w(x[i])) должен использоваться вместе со значениями данных y[i]/sqrt(w(x[i])). Функция весов доступна как hermweight.

Ссылки

1

Википедия, «Подгонка кривых», https://en.wikipedia.org/wiki/Curve_fitting

Примеры

>>> from numpy.polynomial.hermite import hermfit, hermval
>>> x = np.linspace(-10, 10)
>>> err = np.random.randn(len(x))/10
>>> y = hermval(x, [1, 2, 3]) + err
>>> hermfit(x, y, 2)
array([1.0218, 1.9986, 2.9999]) # may vary

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.polynomial.hermite.hermfit.html

Spec-Zone.ru

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