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)