fminBFGS
Syntax
fminBFGS(func, X0, [fprime], [gtol=1e-5], [norm], [epsilon], [maxIter],
[xrtol=0], [c1=1e-4], [c2=0.9])
Arguments
func is the function to minimize. The return value of the function must be numeric type.
X0 is a numeric scalar or vector indicating the initial guess.
fprime (optional) is the gradient of func. If not provided, then func returns the function value and the gradient.
gtol (optional) is a postive number. Iteration will terminates if gradient norm is less than gtol. The default value is 1e-5.
norm (optional) is a positive number indicating the order of norm. Maximum norm is used by default.
epsilon (optional) is a positive number indicating the step size used for numerically calculating the gradient. The default value is 1.4901161193847656e-08.
maxIter (optional) is a non-negative integer indicating the maximum number of iterations. The default value is X0 * 200.
xrtol (optional) is a non-negative number indicating the relative tolerance.
Iteration will terminate if step size is less than xk * xrtol
where
xk is the current parameter vector. The default value is 0.
c1 (optional) is a number in (0,1) indicating the parameter for Armijo condition rule. The default value is 1e-4.
c2 (optional) is a number in (0,1) indicating the parameter for curvature condition rule. The default value is 0.9. Note that c2 must be greater than c1.
Details
Minimize a function using the BFGS algorithm.
Return value: A dictionary with the following members:
-
xopt: A floating-point vector indicating the parameters of the minimum.
-
fopt: A floating-point scalar indicating the value of func at the minimum, i.e.,
fopt=func(xopt)
. -
gopt: A floating-point vector indicating the gradient at the minimum.
gopt=func'(xopt)
, which should be near 0. -
Hinv: A floating-point matrix representing the inverse Hessian matrix.
-
iterations: Number of iterations.
-
fcalls: Number of function calls made.
-
gcalls: Number of gradient calls made.
-
warnFlag: An integer, which can be
-
0: Minimization performed.
-
1: Maximum number of iterations exceeded.
-
2: Line search failed or extreme values encountered.
-
3: NULL result encountered.
-
Examples
Minimize function quadratic_cost
using the BFGS algorithm:
def quadratic_cost(x, Q) {
return dot(dot(x, Q), x)
}
def quadratic_cost_grad(x, Q) {
return 2 * dot(Q, x)
}
x0 = [-3, -4]
cost_weight = diag([1., 10.])
fminBFGS(quadratic_cost{,cost_weight}, x0, quadratic_cost_grad{,cost_weight})
Output:
fcalls->8
warnFlag->0
xopt->[0.000002859166,-4.54371E-7]
Hinv->
#0 #1
0.508225788096 -0.001307222772
-0.001307222772 0.050207740748
gopt->[0.000005718332,-0.000009087439]
fopt->1.0E-11
gcalls->8
iterations->7