|
| Greenstadt () |
|
std::string | name_impl () const |
|
Method | method () const |
|
void | method (Method t_method) |
|
void | enable_one_method () |
|
void | enable_two_method () |
|
void | set_method (Method t_method) |
|
void | update_impl (Vector const &, Vector const &, Matrix const &jacobian_old, Vector const &delta_x_new, Vector const &delta_function_new, Vector const &function_new, Matrix &jacobian_new) |
|
| QuasiNewton () |
|
std::string | name_impl () const |
|
bool | solve_impl (FunctionWrapper function, JacobianWrapper jacobian, Vector const &x_ini, Vector &x_sol) |
|
void | update (Vector const &delta_x_old, Vector const &delta_function_old, Matrix const &jacobian_old, Vector const &delta_x_new, Vector const &delta_function_new, Vector const &function_new, Matrix &jacobian_new) |
|
| RootFinder () |
|
std::string | name () const |
|
Integer | jacobian_evaluations () const |
|
Integer | max_jacobian_evaluations () const |
|
void | max_jacobian_evaluations (Integer t_jacobian_evaluations) |
|
Integer | hessian_evaluations () const |
|
Integer | max_hessian_evaluations () const |
|
void | max_hessian_evaluations (Integer t_hessian_evaluations) |
|
bool | solve (FunctionWrapper function, Vector const &x_ini, Vector &x_sol) |
|
bool | solve (FunctionWrapper function, JacobianWrapper jacobian, Vector const &x_ini, Vector &x_sol) |
|
bool | solve (FunctionWrapper function, JacobianWrapper jacobian, HessianWrapper hessian, Vector const &x_ini, Vector &x_sol) |
|
| Solver () |
|
| Solver (FunctionWrapper function, const InputType &x_ini, InputType &x_sol) |
|
| Solver (FunctionWrapper function, FirstDerivativeWrapper first_derivative, const InputType &x_ini, InputType &x_sol) |
|
| Solver (FunctionWrapper function, FirstDerivativeWrapper first_derivative, SecondDerivativeWrapper second_derivative, const InputType &x_ini, InputType &x_sol) |
|
const InputType & | lower_bound () const |
|
void | lower_bound (const InputType &t_lower_bound) |
|
const InputType & | upper_bound () const |
|
void | upper_bound (const InputType &t_upper_bound) |
|
void | bounds (const InputType &t_lower_bound, const InputType &t_upper_bound) |
|
constexpr Integer | input_dimension () const |
|
constexpr Integer | output_dimension () const |
|
Integer | function_evaluations () const |
|
void | max_function_evaluations (Integer t_max_function_evaluations) |
|
Integer | max_function_evaluations () const |
|
Integer | iterations () const |
|
Integer | max_iterations () const |
|
void | max_iterations (Integer t_max_iterations) |
|
Real | alpha () const |
|
void | alpha (Real t_alpha) |
|
Integer | relaxations () const |
|
Integer | max_relaxations () const |
|
void | max_relaxations (Integer t_max_relaxations) |
|
Real | tolerance () const |
|
void | tolerance (Real t_tolerance) |
|
void | verbose_mode (bool t_verbose) |
|
bool | verbose_mode () const |
|
void | enable_verbose_mode () |
|
void | disable_verbose_mode () |
|
void | damped_mode (bool t_damped) |
|
bool | damped_mode () const |
|
void | enable_damped_mode () |
|
void | disable_damped_mode () |
|
std::string | task () const |
|
void | task (std::string t_task) |
|
bool | converged () const |
|
const TraceType & | trace () const |
|
std::ostream & | ostream () const |
|
void | ostream (std::ostream &t_ostream) |
|
bool | solve (FunctionWrapper function, const InputType &x_ini, InputType &x_sol) |
|
bool | solve (FunctionWrapper function, FirstDerivativeWrapper first_derivative, const InputType &x_ini, InputType &x_sol) |
|
bool | solve (FunctionWrapper function, FirstDerivativeWrapper first_derivative, SecondDerivativeWrapper second_derivative, const InputType &x_ini, InputType &x_sol) |
|
bool | rootfind (Function< Real, FunInDim, FunOutDim, DerivedFunction > const &function, const InputType &x_ini, InputType &x_sol) |
|
bool | optimize (Function< Real, FunInDim, FunOutDim, DerivedFunction > const &function, const InputType &x_ini, InputType &x_sol) |
|
std::string | name () const |
|
|
friend | Solver< Real, N, N, RootFinder< Real, N, DerivedSolver > > |
|
using | InputType |
|
using | OutputType |
|
using | TraceType |
|
using | FirstDerivativeType |
|
using | SecondDerivativeType |
|
using | FunctionWrapper |
|
using | FirstDerivativeWrapper |
|
using | SecondDerivativeWrapper |
|
void | evaluate_jacobian (JacobianWrapper jacobian, const Vector &x, Matrix &out) |
|
void | evaluate_hessian (HessianWrapper hessian, const Vector &x, Matrix &out) |
|
Integer | first_derivative_evaluations () const |
|
Integer | max_first_derivative_evaluations () const |
|
void | max_first_derivative_evaluations (Integer first_derivative_evaluations) |
|
Integer | second_derivative_evaluations () const |
|
Integer | max_second_derivative_evaluations () const |
|
void | max_second_derivative_evaluations (Integer second_derivative_evaluations) |
|
bool | solve (Function< Real, FunInDim, FunOutDim, DerivedFunction > const &function, const InputType &x_ini, InputType &x_sol, bool is_optimization) |
|
void | reset () |
|
void | evaluate_function (FunctionWrapper function, const InputType &x, OutputType &out) |
|
void | evaluate_first_derivative (FirstDerivativeWrapper function, const InputType &x, FirstDerivativeType &out) |
|
void | evaluate_second_derivative (SecondDerivativeWrapper function, const InputType &x, SecondDerivativeType &out) |
|
void | store_trace (const InputType &x) |
|
bool | damp (FunctionWrapper function, InputType const &x_old, InputType const &function_old, InputType const &step_old, InputType &x_new, InputType &function_new, InputType &step_new) |
|
void | header () |
|
void | bottom () |
|
void | info (Real residuals, std::string const ¬es="-") |
|
InputType | m_lower_bound |
|
InputType | m_upper_bound |
|
Integer | m_function_evaluations |
|
Integer | m_first_derivative_evaluations |
|
Integer | m_second_derivative_evaluations |
|
Integer | m_max_function_evaluations |
|
Integer | m_max_first_derivative_evaluations |
|
Integer | m_max_second_derivative_evaluations |
|
Integer | m_iterations |
|
Integer | m_max_iterations |
|
Real | m_alpha |
|
Integer | m_relaxations |
|
Integer | m_max_relaxations |
|
Real | m_tolerance |
|
bool | m_verbose |
|
bool | m_damped |
|
std::ostream * | m_ostream |
|
std::string | m_task |
|
bool | m_converged |
|
TraceType | m_trace |
|
template<typename Real,
Integer N>
class Optimist::RootFinder::Greenstadt< Real, N >
Greenstadt's method
Similarly to the Broyden's methods, Greenstadt's methods are quasi-Newton methods that approximates the Jacobian matrix \(\mathbf{Jf}_{\mathbf{x}}\) an update rule. The generic Greenstadt's method is defined as
\[ \mathbf{H}_k(\mathbf{x}_k) \mathbf{h}_k = -\mathbf{f}(\mathbf{x}_k) \text{,}
\]
where \(\mathbf{H}_k\) is the (inverse) Jacobian approximation at the \(k\)-th iteration.
Based on the update rule, Greenstadt's method is classified into two methods: trivially method 1 and method 2. The update of the Jacobian approximation is performed as
\[ \mathbf{H}_{k+1}^{-1} = \mathbf{H}_k^{-1} - \displaystyle\frac{\mathbf{H}_k^{-1} \Delta\mathbf{f}_k - \Delta\mathbf{x}_k}{\mathbf{g} \Delta\mathbf{f}_k} \mathbf{g} \text{,}
\]
where \(\Delta\mathbf{x}_k = \mathbf{x}_k - \mathbf{x}_{k-1}\), and \(\Delta\mathbf{f}_k = \mathbf{f}(\mathbf{x}_k) - \mathbf{f}(\mathbf{x}_{k-1})\). The quantity \(\mathbf{g}\) is \(\mathbf{g} = \mathbf{f}_k^\top\) for method 1 and \(\mathbf{g} = \mathbf{H}_{k\top}^{-1} \mathbf{H}_k^{-1} \Delta\mathbf{f}_k^{\top}\) for method 2. The choice of the method is based on the convergence history, switching between the methods to adapt to the problem's behavior.
For more details on the Greenstadt's methods refer to the reference: Spedicato E., Greenstadt J. On some classes of variationally derived Quasi-Newton methods for systems of nonlinear algebraic equations, Numerische Mathematik, 29 (1978), pp. 363-380.
- Template Parameters
-
Real | Scalar number type. |
N | Dimension of the root-finding problem. |