13#ifndef OPTIMIST_ROOTFINDER_CHANDRUPATLA_HH
14#define OPTIMIST_ROOTFINDER_CHANDRUPATLA_HH
19 namespace RootFinder {
40 template <
typename Scalar>
59 return "Chandrupatla";
70 template <
typename FunctionLambda>
72#define CMD "Optimist::RootFinder::Chandrupatla::find_root_impl(...): "
95 this->
m_e = QUIET_NAN;
96 this->
m_fe = QUIET_NAN;
99 while (!(std::isfinite(this->
m_fa) && std::isfinite(this->
m_fb))) {
101 this->
m_c = (this->
m_a + this->
m_b) / 2.0;
107 CMD "function evaluation failed at iteration "
130 this->
info(abs_fa < abs_fb ? abs_fa : abs_fb);
133 abs_fa < tolerance_function ||
134 abs_fb < tolerance_function;
136 return abs_fb < abs_fa ? this->
m_b : this->
m_a;
145 (
static_cast<Scalar>(2.0) * std::abs(direction))};
154 this->
info(abs_fa < abs_fb ? abs_fa : abs_fb);
157 abs_fa < tolerance_function || abs_fb < tolerance_function;
175 CMD "function evaluation failed at iteration "
185 this->
m_a = this->
m_b = c;
192 if ((0.0 < fc) == (0.0 < this->
m_fa)) {
216 std::sqrt(
static_cast<Scalar>(1.0) - xi)};
219 if (fl < ph && ph < fh) {
222 t = (this->
m_fa / fba) * (fd / fbd) -
223 (this->
m_fa / fda) * (this->
m_fb / fbd) * (da / ba);
228 if (this->
m_a > this->
m_b) {
229 std::swap(this->
m_a, this->
m_b);
232 return std::abs(this->
m_fa) < std::abs(this->
m_fb) ? this->
m_a
#define OPTIMIST_BASIC_CONSTANTS(Scalar)
Definition Optimist.hh:70
#define OPTIMIST_ASSERT(COND, MSG)
Definition Optimist.hh:48
Scalar m_fa
Definition Bracketing.hh:48
Scalar m_c
Definition Bracketing.hh:50
Scalar m_e
Definition Bracketing.hh:52
Scalar m_a
Definition Bracketing.hh:48
Scalar m_b
Definition Bracketing.hh:49
Scalar m_fc
Definition Bracketing.hh:50
Bracketing()
Definition Bracketing.hh:58
Scalar m_fe
Definition Bracketing.hh:52
Scalar m_fb
Definition Bracketing.hh:49
Scalar m_tolerance_bracketing
Definition Bracketing.hh:43
static constexpr bool RequiresFirstDerivative
Definition Chandrupatla.hh:44
static constexpr bool RequiresSecondDerivative
Definition Chandrupatla.hh:45
Chandrupatla()
Definition Chandrupatla.hh:52
static constexpr bool RequiresFunction
Definition Chandrupatla.hh:43
constexpr std::string name_impl() const
Definition Chandrupatla.hh:58
Scalar find_root_impl(FunctionLambda &&function)
Definition Chandrupatla.hh:71
typename TypeTrait< Scalar >::Scalar Scalar
Definition RootFinder.hh:53
void info(Scalar residuals, const std::string ¬es="-")
Definition SolverBase.hh:1232
bool evaluate_function(FunctionLambda &&function, const Scalar &x, Scalar &out)
Definition SolverBase.hh:1040
Integer m_max_iterations
Definition SolverBase.hh:121
Scalar tolerance() const
Definition SolverBase.hh:513
Integer m_iterations
Definition SolverBase.hh:120
bool m_verbose
Definition SolverBase.hh:130
bool m_converged
Definition SolverBase.hh:136
Namespace for the Optimist library.
Definition Optimist.hh:90