13#ifndef OPTIMIST_ROOTFINDER_BROYDEN_HH
14#define OPTIMIST_ROOTFINDER_BROYDEN_HH
19 namespace RootFinder {
37 template <
typename Vector>
38 requires TypeTrait<Vector>::IsEigen &&
39 (!TypeTrait<Vector>::IsFixed || TypeTrait<Vector>::Dimension > 0)
83 return this->m_method;
91 this->m_method = t_method;
98 this->m_method = Method::GOOD;
105 this->m_method = Method::BAD;
112 this->m_method = Method::COMBINED;
120 this->m_method = t_method;
134 const Vector &delta_function_old,
136 const Vector &delta_x_new,
137 const Vector &delta_function_new,
140 Vector tmp_1(jacobian_old * delta_function_new);
141 Scalar tmp_2{delta_function_new.squaredNorm()};
144 if (this->m_method == Method::COMBINED ||
146 std::abs(delta_x_new.dot(delta_x_old)) /
147 std::abs(delta_x_new.dot(tmp_1)) <
148 std::abs(delta_function_new.dot(delta_function_old)) / tmp_2) {
151 Vector C_g(jacobian_old.transpose() * delta_x_new);
152 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) /
153 (C_g.dot(delta_function_new)) *
158 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) / tmp_2 *
159 delta_function_old.transpose();
#define OPTIMIST_BASIC_CONSTANTS(Scalar)
Definition Optimist.hh:69
void enable_good_method()
Definition Broyden.hh:97
Method method() const
Definition Broyden.hh:82
static constexpr bool RequiresFunction
Definition Broyden.hh:42
void enable_combined_method()
Definition Broyden.hh:111
TypeTrait< Vector > VectorTrait
Definition Broyden.hh:46
constexpr std::string name_impl() const
Definition Broyden.hh:74
static constexpr bool RequiresSecondDerivative
Definition Broyden.hh:44
enum class Method :Integer { GOOD=0, BAD=1, COMBINED=2 } Method
Definition Broyden.hh:55
void enable_bad_method()
Definition Broyden.hh:104
void update_impl(const Vector &delta_x_old, const Vector &delta_function_old, const FirstDerivative &jacobian_old, const Vector &delta_x_new, const Vector &delta_function_new, const Vector &, FirstDerivative &jacobian_new)
Definition Broyden.hh:133
Broyden()
Definition Broyden.hh:68
void set_method(Method t_method)
Definition Broyden.hh:119
typename TypeTrait< Vector >::Scalar Scalar
Definition Broyden.hh:47
Method m_method
Definition Broyden.hh:62
static constexpr bool RequiresFirstDerivative
Definition Broyden.hh:43
void method(Method t_method)
Definition Broyden.hh:90
QuasiNewton()
Definition QuasiNewton.hh:52
std::conditional_t< InputTrait::IsEigen||OutputTrait::IsEigen, std::conditional_t< InputTrait::IsSparse||OutputTrait::IsSparse, Eigen::SparseMatrix< Scalar >, Eigen::Matrix< Scalar, OutputTrait::Dimension, InputTrait::Dimension > >, Scalar > FirstDerivative
Definition SolverBase.hh:80
Integer iterations() const
Definition SolverBase.hh:440
Namespace for the Optimist library.
Definition Optimist.hh:89
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:97
Definition Optimist.hh:113