Skip to contents

B <- B - B s s'B/(s'B s) + y y'/(y's), or in inverse form H <- (I - rho s y') H (I - rho y s') + rho s s' with rho = 1/(y's).

Usage

Bfgsupd(H, s, y, inverse = TRUE)

Arguments

H

Current approximation; the inverse Hessian when inverse is TRUE, the Hessian otherwise.

s

Step x_{k+1} - x_k.

y

Gradient change g_{k+1} - g_k.

inverse

Update the inverse Hessian.

Value

List with M, rho, curvature, secant, p, inverse. secant is the largest violation of the secant condition, which is zero up to rounding for a correct update.

References

Broyden (1970), Fletcher (1970), Goldfarb (1970), Shanno (1970); stated identically in Nocedal and Wright, Numerical Optimization, 2nd edn, Eqs. (6.17) and (6.19). Standard published form; none of the 1970 papers is in the local corpus and none was read.

Examples

Bfgsupd(H = 0.5, s = 5L, y = 5L)
#> $M
#>      [,1]
#> [1,]    1
#> 
#> $rho
#> [1] 0.04
#> 
#> $curvature
#> [1] 25
#> 
#> $secant
#> [1] 0
#> 
#> $p
#> [1] 1
#> 
#> $inverse
#> [1] TRUE
#> 
#> $method
#> [1] "BFGS rank-two secant update (Broyden-Fletcher-Goldfarb-Shanno 1970)"
#> 
#> attr(,"class")
#> [1] "morie_rich_result" "list"