scipy.optimize.

fmin_ncg#

scipy.optimize.fmin_ncg(f, x0, fprime, fhess_p=None, fhess=None, args=(), avextol=1e-05, epsilon=np.float64(1.4901161193847656e-08), maxiter=None, full_output=0, disp=1, retall=0, callback=None, c1=0.0001, c2=0.9)[源代码][源代码]#

使用 Newton-CG 方法对函数进行无约束最小化。

参数:
f : 可调用函数 f(x, *args)可调用

要最小化的目标函数。

x0ndarray

初始猜测。

fprime : 可调用的 f'(x, *args)可调用

f 的梯度。

fhess_p : 可调用函数 fhess_p(x, p, *args), 可选可调用

计算函数 f 的 Hessian 矩阵与任意向量 p 的乘积的函数。

fhess : 可调用函数 fhess(x, *args), 可选可调用

计算函数 f 的 Hessian 矩阵的函数。

参数tuple, 可选

传递给 f, fprime, fhess_p 和 fhess 的额外参数(这些函数接收相同的额外参数集)。

epsilon浮点数或ndarray,可选

如果 fhess 被近似,使用此值作为步长。

回调可调用,可选

一个可选的用户提供的函数,在每次迭代后被调用。调用方式为 callback(xk),其中 xk 是当前的参数向量。

avextolfloat, 可选

当最小化器中的平均相对误差低于此值时,假设收敛。

maxiterint, 可选

要执行的最大迭代次数。

完整输出bool, 可选

如果为真,返回可选的输出。

dispbool, 可选

如果为真,打印收敛消息。

retallbool, 可选

如果为真,则在每次迭代时返回一个结果列表。

c1浮点数,默认值:1e-4

Armijo 条件规则的参数。

c2float, 默认值: 0.9

曲率条件规则的参数

返回:
xoptndarray

最小化 f 的参数,即 f(xopt) == fopt

fopt浮动

函数在 xopt 处的值,即 fopt = f(xopt)

fcalls整数

函数调用的次数。

gcalls整数

已进行的梯度调用次数。

hcalls整数

已进行的 Hessian 调用次数。

警告标志整数

算法生成的警告。1 : 超过最大迭代次数。2 : 线搜索失败(精度损失)。3 : 遇到NaN结果。

allvecs列表

如果 retall 为 True(见下文),每次迭代的结果。

参见

minimize

用于多元函数最小化算法的接口。特别参见 ‘Newton-CG’ 方法

注释

只需提供 fhess_pfhess 中的一个。如果提供了 fhess,则 fhess_p 将被忽略。如果既没有提供 fhess 也没有提供 fhess_p,则将使用 fprime 上的有限差分来近似海森积。fhess_p 必须计算海森矩阵乘以任意向量。如果未提供,则使用 fprime 上的有限差分来计算。

Newton-CG 方法也被称为截断牛顿法。此函数与 scipy.optimize.fmin_tnc 的区别在于

  1. scipy.optimize.fmin_ncg 完全使用 Python 编写,使用了 NumPy

    而 scipy 则调用一个 C 函数。

  2. scipy.optimize.fmin_ncg 仅用于无约束最小化

    而 scipy.optimize.fmin_tnc 用于无约束最小化或盒约束最小化。(盒约束为每个变量分别提供下限和上限。)

参数 c1c2 必须满足 0 < c1 < c2 < 1

参考文献

Wright & Nocedal, ‘数值优化’, 1999, p. 140.