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)[source]#

使用牛顿共轭梯度法(Newton-CG)对函数进行无约束最小化。

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

要最小化的目标函数。

x0ndarray

初始猜测值。

fprime可调用对象 f'(x, *args)

f 的梯度。

fhess_p可调用对象 fhess_p(x, p, *args), 可选

计算函数 f 的海森矩阵乘以任意向量 p 的函数。

fhess可调用对象 fhess(x, *args), 可选

计算函数 f 的海森矩阵的函数。

args元组, 可选

传递给 f、fprime、fhess_p 和 fhess 的额外参数(相同的额外参数集会提供给所有这些函数)。

epsilon浮点数 或 ndarray, 可选

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

callback可调用对象, 可选

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

avextol浮点数, 可选

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

maxiter整型, 可选

要执行的最大迭代次数。

full_output布尔型, 可选

如果为 True,返回可选输出。

disp布尔型, 可选

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

retall布尔型, 可选

如果为 True,返回每次迭代的结果列表。

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

Armijo 条件规则的参数。

c2浮点数, 默认值: 0.9

曲率条件规则的参数

返回值:
xoptndarray

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

fopt浮点数

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

fcalls整型

函数调用的次数。

gcalls整型

梯度调用的次数。

hcalls整型

海森调用次数。

warnflag整型

算法生成的警告。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 纯粹使用 NumPy 编写

    和 SciPy,而 scipy.optimize.fmin_tnc 调用 C 函数。

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

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

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

参考文献

Wright & Nocedal, ‘数值优化’, 1999, 第 140 页。