Metis 2.0.0
High-performance C++20 dual-mode numerical framework
Loading...
Searching...
No Matches
RootFinding.hpp File Reference

Nonlinear root finding and implicit function solvers. More...

#include "metis/core/Function.hpp"
#include "metis/core/MetisConcepts.hpp"
#include "metis/core/MetisError.hpp"
#include <casadi/casadi.hpp>
#include <algorithm>
#include <atomic>
#include <cmath>
#include <cstdint>
#include <iostream>
#include <limits>
#include <string>
#include <vector>
Include dependency graph for RootFinding.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  metis::RootFinderOptions
 Options for root finding algorithms. More...
struct  metis::ImplicitFunctionOptions
 Options for building differentiable implicit solve wrappers. More...
struct  metis::RootResult< Scalar >
 Result of a root finding operation. More...
struct  metis::detail::NumericState
struct  metis::detail::StageOutcome
class  metis::NewtonSolver
 Persistent nonlinear root solver. More...

Namespaces

namespace  metis
namespace  metis::detail
 Smooth approximation of ReLU function: softplus(x) = (1/beta) * log(1 + exp(beta * x)).

Enumerations

enum class  metis::RootSolveStrategy {
  metis::Auto , metis::TrustRegionNewton , metis::LineSearchNewton , metis::QuasiNewtonBroyden ,
  metis::PseudoTransientContinuation
}
 Numeric nonlinear solver strategy selection. More...
enum class  metis::RootSolveMethod {
  metis::None , metis::TrustRegionNewton , metis::LineSearchNewton , metis::QuasiNewtonBroyden ,
  metis::PseudoTransientContinuation
}
 Numeric nonlinear solver method actually used. More...

Functions

std::string metis::detail::method_name (RootSolveMethod method)
RootSolveMethod metis::detail::strategy_to_method (RootSolveStrategy strategy)
std::string metis::detail::unique_name (const std::string &prefix)
void metis::detail::validate_root_options (const RootFinderOptions &opts, const std::string &context)
void metis::detail::validate_root_problem (const casadi::Function &f_casadi, const std::string &context)
casadi::Dict metis::detail::opts_to_dict (const RootFinderOptions &opts)
casadi::DM metis::detail::vector_to_dm (const Eigen::VectorXd &x)
Eigen::VectorXd metis::detail::dm_to_vector (const casadi::DM &x)
Eigen::MatrixXd metis::detail::dm_to_matrix (const casadi::DM &x)
std::string metis::detail::implicit_function_name (const casadi::Function &g_casadi)
void metis::detail::validate_implicit_problem (const casadi::Function &g_casadi, const Eigen::VectorXd &x_guess, const ImplicitFunctionOptions &implicit_opts)
Eigen::VectorXd metis::detail::solve_linear_system (const Eigen::MatrixXd &A, const Eigen::VectorXd &b)
bool metis::detail::all_finite (const Eigen::VectorXd &x)
bool metis::detail::all_finite (const Eigen::MatrixXd &x)
Eigen::VectorXd metis::detail::evaluate_residual_only (const casadi::Function &residual_fn, const Eigen::VectorXd &x)
NumericState metis::detail::evaluate_state (const casadi::Function &residual_fn, const casadi::Function &jacobian_fn, const Eigen::VectorXd &x, const std::string &context)
void metis::detail::maybe_log (const RootFinderOptions &opts, const std::string &message)
bool metis::detail::is_converged (const NumericState &state, const RootFinderOptions &opts)
StageOutcome metis::detail::solve_trust_region (const casadi::Function &residual_fn, const casadi::Function &jacobian_fn, const NumericState &start, const RootFinderOptions &opts, int max_iterations)
StageOutcome metis::detail::solve_line_search (const casadi::Function &residual_fn, const casadi::Function &jacobian_fn, const NumericState &start, const RootFinderOptions &opts, int max_iterations)
StageOutcome metis::detail::solve_broyden (const casadi::Function &residual_fn, const casadi::Function &jacobian_fn, const NumericState &start, const RootFinderOptions &opts, int max_iterations)
StageOutcome metis::detail::solve_pseudo_transient (const casadi::Function &residual_fn, const casadi::Function &jacobian_fn, const NumericState &start, const RootFinderOptions &opts, int max_iterations)
template<typename Scalar>
RootResult< Scalar > metis::rootfinder (const metis::Function &F, const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &x0, const RootFinderOptions &opts={})
 Solve F(x) = 0 for x given an initial guess.
metis::Function metis::create_implicit_function (const metis::Function &G, const Eigen::VectorXd &x_guess, const RootFinderOptions &opts={}, const ImplicitFunctionOptions &implicit_opts={})
 Create a differentiable implicit solve wrapper for G(...) = 0.

Detailed Description

Nonlinear root finding and implicit function solvers.

See also
AutoDiff.hpp