当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy optimize.leastsq用法及代码示例


本文简要介绍 python 语言中 scipy.optimize.leastsq 的用法。

用法:

scipy.optimize.leastsq(func, 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, factor=100, diag=None)#

最小化一组方程的平方和。

x = arg min(sum(func(y)**2,axis=0))
         y

参数

func 可调用的

应至少采用一个(可能长度为 N 向量)参数并返回 M 浮点数。它不得返回NaNs,否则拟合可能会失败。 M 必须大于或等于 N

x0 ndarray

最小化的起始估计。

args 元组,可选

func 的任何额外参数都放在这个元组中。

Dfun 可调用的,可选的

计算具有跨行导数的 func 的雅可比行列式的函数或方法。如果这是无,雅可比将被估计。

full_output 布尔型,可选

如果True,返回所有可选输出(不仅仅是x伊尔)。

col_deriv 布尔型,可选

如果是 True ,则指定雅可比函数沿列计算导数(更快,因为没有转置操作)。

ftol 浮点数,可选

平方和所需的相对误差。

xtol 浮点数,可选

近似解中所需的相对误差。

gtol 浮点数,可选

函数向量和雅可比列之间所需的正交性。

maxfev 整数,可选

函数的最大调用次数。如果提供了 Dfun,则默认 maxfev 为 100*(N+1),其中 N 是 x0 中的元素数,否则默认 maxfev 为 200*(N+1)。

epsfcn 浮点数,可选

用于确定雅可比行列式前向差分近似的合适步长的变量(对于 Dfun=None)。通常实际步长为 sqrt(epsfcn)*x 如果 epsfcn 小于机器精度,则假设相对误差在机器精度的数量级。

factor 浮点数,可选

确定初始步长界限的参数(factor * || diag * x||)。应该在间隔 (0.1, 100) 中。

diag 顺序,可选

N 个正条目,用作变量的比例因子。

返回

x ndarray

解决方案(或不成功调用的最后一次迭代的结果)。

cov_x ndarray

Hessian 矩阵的逆矩阵。法雅克ipvt用于构建 Hessian 矩阵的估计。 None 值表示奇异矩阵,表示参数中的曲率x数值上是平坦的。获取参数的协方差矩阵x,cov_x必须乘以残差方差 - 请参阅curve_fit。仅返回如果full_outputTrue.

infodict dict

带有键的可选输出字典:

nfev

函数调用次数

fvec

在输出处评估的函数

fjac

最终近似雅可比矩阵的 QR 分解的 R 矩阵的排列,按列存储。与 ipvt 一起,可以近似估计估计的协方差。

ipvt

一个长度为 N 的整数数组,它定义了一个置换矩阵 p,使得 fjac*p = q*r,其中 r 是具有非递增大小的对角线元素的上三角形。 p 的 j 列是单位矩阵的 ipvt(j) 列。

qtf

向量 (transpose(q) * fvec)。

仅返回如果full_outputTrue.

mesg str

一条字符串消息,提供有关故障原因的信息。仅返回如果full_outputTrue.

ier int

一个整数标志。如果它等于 1、2、3 或 4,则找到了解决方案。否则,找不到解决方案。无论哪种情况,可选的输出变量‘mesg’ 都会提供更多信息。

注意

“leastsq” 是 MINPACK 的 lmdif 和 lmder 算法的封装。

cov_x 是最小二乘目标函数的 Hessian 矩阵的雅可比近似。这种近似假设目标函数基于一些观察到的目标数据 (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)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.leastsq。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。