13#ifndef OPTIMIST_ROOTFINDER_BROYDEN_HH
14#define OPTIMIST_ROOTFINDER_BROYDEN_HH
40 template <
typename Real, Integer N>
72 std::ostringstream os;
74 if (this->
m_method == Method::GOOD) {
76 }
else if (this->
m_method == Method::BAD) {
78 }
else if (this->
m_method == Method::COMBINED) {
128 Vector const & delta_x_old,
Vector const & delta_function_old,
Matrix const & jacobian_old,
132 Vector tmp_1(jacobian_old * delta_function_new);
133 Real tmp_2{delta_function_new.squaredNorm()};
136 std::abs(delta_x_new.transpose() * delta_x_old) / std::abs(delta_x_new.transpose() * tmp_1)
137 < std::abs(delta_function_new.transpose() * delta_function_old) / tmp_2) {
139 Vector C_g(jacobian_old.transpose() * delta_x_new);
140 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) / (C_g.transpose() * delta_function_new) * C_g.transpose();
143 jacobian_new = jacobian_old - (tmp_1 - delta_x_new) / tmp_2 * delta_function_old.transpose();
#define OPTIMIST_BASIC_CONSTANTS(Real)
Definition Optimist.hh:70
static constexpr bool requires_function
Definition Broyden.hh:44
void method(Method t_method)
Definition Broyden.hh:94
Broyden()
Definition Broyden.hh:64
static constexpr bool requires_first_derivative
Definition Broyden.hh:45
typename QuasiNewton< Real, N, Broyden< Real, N > >::Matrix Matrix
Definition Broyden.hh:52
void enable_good_method()
Definition Broyden.hh:99
void enable_bad_method()
Definition Broyden.hh:104
static constexpr bool requires_second_derivative
Definition Broyden.hh:46
Method m_method
Definition Broyden.hh:58
std::string name_impl() const
Definition Broyden.hh:70
void enable_combined_method()
Definition Broyden.hh:109
Method method() const
Definition Broyden.hh:88
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:127
enum class Method :Integer {GOOD=0, BAD=1, COMBINED=2} Method
Definition Broyden.hh:50
typename QuasiNewton< Real, N, Broyden< Real, N > >::JacobianWrapper JacobianWrapper
Definition Broyden.hh:54
void set_method(Method t_method)
Definition Broyden.hh:115
typename QuasiNewton< Real, N, Broyden< Real, N > >::Vector Vector
Definition Broyden.hh:51
typename QuasiNewton< Real, N, Broyden< Real, N > >::FunctionWrapper FunctionWrapper
Definition Broyden.hh:53
QuasiNewton()
Definition QuasiNewton.hh:64
bool solve(FunctionWrapper function, Vector const &x_ini, Vector &x_sol)
Definition RootFinder.hh:164
Integer iterations() const
Definition Solver.hh:314
Namespace for the Optimist library.
Definition Optimist.hh:87
OPTIMIST_DEFAULT_INTEGER_TYPE Integer
The Integer type as used for the API.
Definition Optimist.hh:95