15template <
typename Function,
typename Real>
17derivative(Function y, Real x, Real delta_target = Real{1.0e-6},
18 Real dx = Real{0.01},
unsigned it_limit = 250) {
21 for (
auto i = 0u;; ++i) {
22 const auto dydx0 = dydx;
23 const auto dy = 0.5 * (y(x + dx) - y(x - dx));
25 delta = std::abs(dydx - dydx0);
26 if (1.1 * delta < delta_target || i > it_limit)
30 return {dydx, 1.1 * delta};
40template <
typename Function,
typename Real>
41std::pair<Real, Real>
Newtons(Function f, Real x,
42 Real delta_target = Real{1.0e-6},
43 Real dx = Real{0.01},
unsigned it_limit = 250) {
45 for (
auto i = 0u;; ++i) {
47 const auto df =
derivative(f, x, delta_target, dx, 4).first;
50 if (std::abs(delta) < delta_target || i > it_limit)
53 return {x, 1.1 * delta};
57template <
typename Function,
typename Real>
58std::pair<Real, Real>
Newtons(Function f, Real x, std::pair<Real, Real> bounds,
59 Real delta_target = Real{1.0e-6},
60 Real dx = Real{0.01},
unsigned it_limit = 250) {
62 for (
auto i = 0u;; ++i) {
64 const auto df =
derivative(f, x, delta_target, dx, 4).first;
67 if (x < bounds.first) {
71 if (x > bounds.second) {
75 if (std::abs(delta) < delta_target || i > it_limit)
78 return {x, 1.1 * delta};
double Real
Data type used to store integrals.
Definition QkTable.hpp:15
double f(RaB r, PrincipalQN n, DiracQN k, Zeff z, AlphaFS a)
Upper radial component.
Definition DiracHydrogen.cpp:71
qip library: A collection of useful functions
Definition Array.hpp:9
std::pair< Real, Real > derivative(Function y, Real x, Real delta_target=Real{1.0e-6}, Real dx=Real{0.01}, unsigned it_limit=250)
Slow, but accurate, method of finding derivative of function (y) at a point (x). Returns derivative +...
Definition Methods.hpp:17
std::pair< Real, Real > Newtons(Function f, Real x, Real delta_target=Real{1.0e-6}, Real dx=Real{0.01}, unsigned it_limit=250)
Solve f(x) = 0 for x using Newtons method. Returns root + error estimate/.
Definition Methods.hpp:41