scipy.optimize.

leastsq#

scipy.optimize.leastsq(функция, x0, args=(), Dfun=None, full_output=False, col_deriv=False, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=None, фактор=100, диаг=None)[источник]#

Минимизировать сумму квадратов набора уравнений.

x = arg min(sum(func(y)**2,axis=0))
         y
Параметры:
функцияcallable

Должен принимать хотя бы один (возможно, длины N векторный) аргумент и возвращает M числа с плавающей запятой. Оно не должно возвращать NaN, иначе подгонка может завершиться неудачей. M должно быть больше или равно N.

x0ndarray

Начальная оценка для минимизации.

argsкортеж, необязательный

Любые дополнительные аргументы для функции помещаются в этот кортеж.

Dfunвызываемый объект, необязательный

Функция или метод для вычисления якобиана функции func с производными по строкам. Если None, якобиан будет оценён.

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

Если True, вернуть все дополнительные выходные данные (не только x и ier).

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

Если True, указать, что функция Якоби вычисляет производные по столбцам (быстрее, потому что нет операции транспонирования).

ftolfloat, опционально

Желаемая относительная ошибка в сумме квадратов.

xtolfloat, опционально

Относительная погрешность, желаемая в приближённом решении.

gtolfloat, опционально

Ортогональность, желаемая между вектором функции и столбцами матрицы Якоби.

maxfevint, необязательный

Максимальное количество вызовов функции. Если Dfun предоставлен, тогда по умолчанию maxfev равно 100*(N+1), где N - количество элементов в x0, в противном случае значение по умолчанию maxfev равно 200*(N+1).

epsfcnfloat, опционально

Переменная, используемая для определения подходящей длины шага для аппроксимации Якобиана методом прямых разностей (для Dfun=None). Обычно фактическая длина шага будет sqrt(epsfcn)*x. Если epsfcn меньше машинной точности, предполагается, что относительные ошибки имеют порядок машинной точности.

факторfloat, опционально

Параметр, определяющий начальную границу шага (factor * || diag * x||). Должно быть в интервале (0.1, 100).

диагsequence, optional

N положительных записей, которые служат масштабными коэффициентами для переменных.

Возвращает:
xndarray

Решение (или результат последней итерации для неудачного вызова).

cov_xndarray

Обратная матрица Гессе. fjac и ipvt используются для построения оценки гессиана. Значение None указывает на сингулярную матрицу, что означает кривизну в параметрах x численно плоский. Чтобы получить ковариационную матрицу параметров x, cov_x должен быть умножен на дисперсию остатков – см. curve_fit. Возвращается только если full_output является True.

infodictdict

словарь дополнительных выходных данных с ключами:

nfev

Количество вызовов функции

fvec

Функция, вычисленная на выходе

fjac

Перестановка матрицы R QR-разложения окончательной приближенной матрицы Якоби, хранящаяся по столбцам. Вместе с ipvt можно аппроксимировать ковариацию оценки.

ipvt

Целочисленный массив длины N, который определяет матрицу перестановки p, такую что fjac*p = q*r, где r — верхняя треугольная матрица с диагональными элементами неубывающей величины. Столбец j матрицы p — это столбец ipvt(j) единичной матрицы.

qtf

Вектор (transpose(q) * fvec).

Возвращается только если full_output является True.

mesgstr

Строковое сообщение с информацией о причине сбоя. Возвращается только если full_output является True.

ierint

Целочисленный флаг. Если он равен 1, 2, 3 или 4, решение найдено. В противном случае решение не найдено. В любом случае дополнительная выходная переменная 'mesg' предоставляет больше информации.

Смотрите также

least_squares

Новый интерфейс для решения задач нелинейных наименьших квадратов с ограничениями на переменные. См. method='lm' в частности.

Примечания

«leastsq» — это обертка вокруг алгоритмов lmdif и lmder из MINPACK.

cov_x — это аппроксимация Якобиана к гессиану функции наименьших квадратов. Эта аппроксимация предполагает, что целевая функция основана на разнице между некоторыми наблюдаемыми целевыми данными (ydata) и (нелинейной) функцией параметров f(xdata, params)

func(params) = ydata - f(xdata, params)

так что целевая функция

  min   sum((ydata - f(xdata, params))**2, axis=0)
params

Решение, x, всегда является одномерным массивом, независимо от формы x0, или x0 является скаляром.

Примеры

>>> from scipy.optimize import leastsq
>>> def func(x):
...     return 2*(x-3)**2+1
>>> leastsq(func, 0)
(array([2.99999999]), 1)