|
| 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) |
|
| 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 |
|
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
-
Real | Scalar number type. |
DerivedSolver | Derived solver class. |