Janus 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 "janus/core/Function.hpp"
#include "janus/core/JanusConcepts.hpp"
#include "janus/core/JanusError.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  janus::RootFinderOptions
 Options for root finding algorithms. More...
struct  janus::ImplicitFunctionOptions
 Options for building differentiable implicit solve wrappers. More...
struct  janus::RootResult< Scalar >
 Result of a root finding operation. More...
struct  janus::detail::NumericState
struct  janus::detail::StageOutcome
class  janus::NewtonSolver
 Persistent nonlinear root solver. More...

Namespaces

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

Enumerations

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

Functions

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