21 #ifndef FUB_NEWTON_ITERATION_HPP
22 #define FUB_NEWTON_ITERATION_HPP
28 template <
typename Function,
typename Derivative>
30 double tolerance = 1e-7,
int max_iterations = 5000) {
34 double err = std::abs(fx);
35 while (err > tolerance && counter < max_iterations) {
37 double offset = fx / dfx;
38 double next = x - offset;
39 x = ((next - next) != (next - next) || next < 0.0) ? 0.5 * x : next;
44 if (counter == max_iterations && fx > tolerance) {
45 std::ostringstream out;
46 out <<
"Newton Iteration did not converge. (x0 = " << x0 <<
", x = " << x
47 <<
", fx = " << fx <<
", counter = " << counter <<
", err = " << err
49 throw std::runtime_error(out.str());
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
double NewtonIteration(Function &&f, Derivative &&Df, double x0, double tolerance=1e-7, int max_iterations=5000)
Definition: NewtonIteration.hpp:29