|
suanPan
|
The LBFGS class defines a solver using LBFGS iteration method. More...
#include <LBFGS.hpp>
Public Member Functions | |
| LBFGS (const unsigned MH=10, const unsigned MI=500, const double AT=datum::eps, const double RT=datum::eps) | |
| template<typename F > requires requires(F t, const vec& x) { { t.evaluate_residual(x) } -> std::same_as<vec>; { t.evaluate_jacobian(x) } -> std::same_as<mat>; } | |
| int | optimize (F &func, vec &x) |
The LBFGS class defines a solver using LBFGS iteration method.
The LBFGS method is a rank two quasi–Newton method which has a super linear convergence rate. The LBFGS class supports both conventional BFGS and LBFGS method which uses limited history information.
\begin{gather} K_{n+1}^{-1}=\left(I-\dfrac{\Delta{}UR^T}{R^T\Delta{}U}\right)K_n^{-1}\left(I-\dfrac{R\Delta{}U^T}{R^T\Delta{}U}\right)+\dfrac{\Delta{}U\Delta{}U^T}{R^T\Delta{}U}. \end{gather}
The \(I\) is identity matrix. The \(\Delta{}U\) is current displacement increment. The \(R\) is current residual. For brevity, in both terms, the subscript \(n\) representing current step is dropped.
|
inlineexplicit |
|
inline |