Optimist  0.0.0
A C++ library for optimization
Loading...
Searching...
No Matches
Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver > Class Template Reference

Class container for the scalar scalar root-finder. More...

#include <ScalarRootFinder.hh>

Inherits Optimist::Solver< Real, 1, 1, DerivedSolver >.

Inherited by Optimist::ScalarRootFinder::Bracketing< Real, DerivedSolver >.

Public Types

using FunctionWrapper = typename Solver<Real, 1, 1, DerivedSolver>::FunctionWrapper
 
using FirstDerivativeWrapper = typename Solver<Real, 1, 1, DerivedSolver>::FirstDerivativeWrapper
 
using SecondDerivativeWrapper = typename Solver<Real, 1, 1, DerivedSolver>::SecondDerivativeWrapper
 

Public Member Functions

 ScalarRootFinder ()
 
std::string name () const
 
bool solve (FunctionWrapper function, Real x_ini, Real &x_sol)
 
bool solve (FunctionWrapper function, FirstDerivativeWrapper first_derivative, Real x_ini, Real &x_sol)
 
bool solve (FunctionWrapper function, FirstDerivativeWrapper first_derivative, SecondDerivativeWrapper second_derivate, Real x_ini, Real &x_sol)
 
- Public Member Functions inherited from Optimist::Solver< Real, 1, 1, DerivedSolver >
 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 InputTypelower_bound () const
 
void lower_bound (const InputType &t_lower_bound)
 
const InputTypeupper_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 TraceTypetrace () 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
 

Public Attributes

friend Solver< Real, 1, 1, ScalarRootFinder< Real, DerivedSolver > >
 

Static Public Attributes

static constexpr bool is_rootfinder {true}
 
static constexpr bool is_optimizer {false}
 
static constexpr bool requires_function {DerivedSolver::requires_function}
 
static constexpr bool requires_first_derivative {DerivedSolver::requires_first_derivative}
 
static constexpr bool requires_second_derivative {DerivedSolver::requires_second_derivative}
 

Additional Inherited Members

- Protected Types inherited from Optimist::Solver< Real, 1, 1, DerivedSolver >
using InputType
 
using OutputType
 
using TraceType
 
using FirstDerivativeType
 
using SecondDerivativeType
 
using FunctionWrapper
 
using FirstDerivativeWrapper
 
using SecondDerivativeWrapper
 
- Protected Member Functions inherited from Optimist::Solver< Real, 1, 1, DerivedSolver >
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 &notes="-")
 
- Protected Attributes inherited from Optimist::Solver< Real, 1, 1, DerivedSolver >
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
 

Detailed Description

template<typename Real, typename DerivedSolver>
class Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >

Scalar root finder

This section describes the scalar root-finders implemented in Optimist. The available root-finders are derivative and non-derivative methods. Derivative methods employ the function's derivative to find the root with high accuracy, while non-derivative methods approximate the derivative for improved efficiency in certain scenarios.

Here, the solvers are implemented for solving problems of the form

\[ f(x) = 0 \text{,} \quad \text{with} \quad f: \mathbb{R} \rightarrow \mathbb{R} \text{,} \]

which consist in finding the root of the function \(f\) by iteratively updating the current iterate \(x_k\) until convergence is achieved. The solvers require the function \(f\) and its first derivative \(f^{\prime}(x)\) to be provided by the user. Alternatively, the derivative can be approximated numerically using finite differences, depending on the problem's complexity and the user's preference.

Affine-invariant step

By default, the derivative scalar root-finders in Optimist use optionally an affine-invariant advancing step to ensure convergence. The generic advancing step \(h_k\) is computed as

\[ x_{k+1} = x_k + \alpha_k h_k \text{,} \]

where \(\alpha_k\) is a damping coefficient that ensures convergence by satisfying

\[ \left\|f^{\prime}_{x}(x_k)^{-1} f(x_{k+1})\right\| \leq \left(1 - \displaystyle\frac{\alpha_k}{2}\right) \left\|f^{\prime}_{x}(x_k)^{-1} f(x_k)\right\| = \left(1 - \displaystyle\frac{\alpha_k}{2} \right) \left\|h_k\right\| \text{.} \]

For detailed information on the affine-invariant Newton's method, refer to this link, or the works by P. Deuflhard.

Template Parameters
RealScalar number type.
DerivedSolverDerived solver class.

Member Typedef Documentation

◆ FirstDerivativeWrapper

template<typename Real, typename DerivedSolver>
using Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::FirstDerivativeWrapper = typename Solver<Real, 1, 1, DerivedSolver>::FirstDerivativeWrapper

◆ FunctionWrapper

template<typename Real, typename DerivedSolver>
using Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::FunctionWrapper = typename Solver<Real, 1, 1, DerivedSolver>::FunctionWrapper

◆ SecondDerivativeWrapper

template<typename Real, typename DerivedSolver>
using Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::SecondDerivativeWrapper = typename Solver<Real, 1, 1, DerivedSolver>::SecondDerivativeWrapper

Constructor & Destructor Documentation

◆ ScalarRootFinder()

template<typename Real, typename DerivedSolver>
Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::ScalarRootFinder ( )
inline

Class constructor for the scalar root-finder.

Member Function Documentation

◆ name()

template<typename Real, typename DerivedSolver>
std::string Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::name ( ) const
inline

Get the solver name.

Returns
The solver name.

◆ solve() [1/3]

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::solve ( FunctionWrapper function,
FirstDerivativeWrapper first_derivative,
Real x_ini,
Real & x_sol )
inline

Solve the root-finding problem given the function, and its first derivative.

Parameters
[in]functionFunction wrapper.
[in]first_derivativeFirst derivative wrapper.
[in]x_iniInitialization point.
[out]x_solSolution point.
Returns
The convergence boolean flag.

◆ solve() [2/3]

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::solve ( FunctionWrapper function,
FirstDerivativeWrapper first_derivative,
SecondDerivativeWrapper second_derivate,
Real x_ini,
Real & x_sol )
inline

Solve the root-finding problem given the function, and its first and second derivatives.

Parameters
[in]functionFunction wrapper.
[in]first_derivativeFirst derivative wrapper.
[in]x_iniInitialization point.
[out]x_solSolution point.
Returns
The convergence boolean flag.

◆ solve() [3/3]

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::solve ( FunctionWrapper function,
Real x_ini,
Real & x_sol )
inline

Solve the root-finding problem given the function, and without derivatives.

Parameters
[in]functionFunction wrapper.
[in]x_iniInitialization point.
[out]x_solSolution point.
Returns
The convergence boolean flag.

Member Data Documentation

◆ is_optimizer

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::is_optimizer {false}
staticconstexpr

◆ is_rootfinder

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::is_rootfinder {true}
staticconstexpr

◆ requires_first_derivative

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::requires_first_derivative {DerivedSolver::requires_first_derivative}
staticconstexpr

◆ requires_function

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::requires_function {DerivedSolver::requires_function}
staticconstexpr

◆ requires_second_derivative

template<typename Real, typename DerivedSolver>
bool Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::requires_second_derivative {DerivedSolver::requires_second_derivative}
staticconstexpr

Basic constants.

◆ Solver< Real, 1, 1, ScalarRootFinder< Real, DerivedSolver > >

template<typename Real, typename DerivedSolver>
friend Optimist::ScalarRootFinder::ScalarRootFinder< Real, DerivedSolver >::Solver< Real, 1, 1, ScalarRootFinder< Real, DerivedSolver > >

The documentation for this class was generated from the following file: