13#ifndef OPTIMIST_ROOTFINDER_BROYDEN_HH
14#define OPTIMIST_ROOTFINDER_BROYDEN_HH
40 template <
typename Real, Integer N>
73 std::ostringstream os;
75 if (this->m_method == Method::GOOD) {
77 }
else if (this->m_method == Method::BAD) {
79 }
else if (this->m_method == Method::COMBINED) {
129 Vector const & delta_x_old,
Vector const & delta_function_old,
Matrix const & jacobian_old,
133 Vector tmp_1(jacobian_old * delta_function_new);
134 Real tmp_2{delta_function_new.squaredNorm()};
136 if (this->m_method == Method::COMBINED || this->m_method == Method::GOOD || this->
iterations() <
Integer(2) ||
137 std::abs(delta_x_new.transpose() * delta_x_old) / std::abs(delta_x_new.transpose() * tmp_1)
138 < std::abs(delta_function_new.transpose() * delta_function_old) / tmp_2) {
140 Vector C_g(jacobian_old.transpose() * delta_x_new);
141 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) / (C_g.transpose() * delta_function_new) * C_g.transpose();
144 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) / tmp_2 * delta_function_old.transpose();
#define OPTIMIST_BASIC_CONSTANTS(Real)
Definition Optimist.hh:71
static constexpr bool requires_function
Definition Broyden.hh:44
void method(Method t_method)
Definition Broyden.hh:95
Broyden()
Definition Broyden.hh:65
static constexpr bool requires_first_derivative
Definition Broyden.hh:45
void enable_good_method()
Definition Broyden.hh:100
void enable_bad_method()
Definition Broyden.hh:105
static constexpr bool requires_second_derivative
Definition Broyden.hh:46
Method m_method
Definition Broyden.hh:59
std::string name_impl() const
Definition Broyden.hh:71
void enable_combined_method()
Definition Broyden.hh:110
Method method() const
Definition Broyden.hh:89
void update_impl(Vector const &delta_x_old, Vector const &delta_function_old, Matrix const &jacobian_old, Vector const &delta_x_new, Vector const &delta_function_new, Vector const &, Matrix &jacobian_new)
Definition Broyden.hh:128
enum class Method :Integer {GOOD=0, BAD=1, COMBINED=2} Method
Definition Broyden.hh:56
void set_method(Method t_method)
Definition Broyden.hh:116
Class container for the QuasiNewton's method.
Definition QuasiNewton.hh:42
QuasiNewton()
Definition QuasiNewton.hh:61
typename SolverBase< Real, N, N, Broyden< Real, N >, ForceEigen >::InputType Vector
Definition RootFinder.hh:61
typename SolverBase< Real, N, N, Broyden< Real, N >, ForceEigen >::FirstDerivativeType Matrix
Definition RootFinder.hh:64
Integer iterations() const
Definition SolverBase.hh:329
Namespace for the Optimist library.
Definition Optimist.hh:88
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:96