% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/qn_updates.R
\name{update_bfgs}
\alias{update_bfgs}
\title{BFGS (Broyden-Fletcher-Goldfarb-Shanno) Hessian Update}
\usage{
update_bfgs(b, s, y)
}
\arguments{
\item{b}{Current Hessian approximation (n x n symmetric positive definite
matrix).}

\item{s}{Step vector: s = x_new - x_old.}

\item{y}{Gradient difference: y = g_new - g_old.}
}
\value{
A list with components:
\item{b}{Updated Hessian approximation (n x n matrix).}
\item{skipped}{Logical indicating if update was skipped due to curvature
condition violation.}
}
\description{
Updates the Hessian approximation using the BFGS formula. BFGS maintains
positive definiteness when the curvature condition y'*s > 0 is satisfied.
}
\details{
The BFGS update formula is:
\deqn{B_{k+1} = B_k - \frac{B_k s s^T B_k}{s^T B_k s} + \frac{y y^T}{y^T s}}

The update is skipped when the curvature condition \eqn{y^T s > 0} is
violated. This can happen on nonconvex problems. When skipped, the previous
approximation is retained.

Note: BFGS maintains positive definiteness, which wastes ARC's ability to
handle indefinite Hessians. Consider using SR1 for nonconvex problems.
}
\references{
Algorithm 4a in design/pseudocode.qmd

Nocedal, J., & Wright, S. J. (2006). Numerical Optimization (2nd ed.).
Springer. Section 6.1.
}
\keyword{internal}
