6#ifndef THEORETICA_EXTREMA_H
7#define THEORETICA_EXTREMA_H
9#include "../core/constants.h"
23 template<
typename RealFunction>
39 unsigned int iter = 0;
43 while(
abs(x2 - x1) > tolerance && iter <= max_iter) {
51 x3 = x2 - (x2 - x1) /
PHI;
52 x4 = x1 + (x2 - x1) /
PHI;
62 return iter_result<real>((x2 + x1) / 2.0, iter,
abs(x2 - x1) / 2.0);
73 template<
typename RealFunction>
89 unsigned int iter = 0;
91 while(
abs(x2 - x1) > tolerance && iter <= max_iter) {
99 x3 = x2 - (x2 - x1) /
PHI;
100 x4 = x1 + (x2 - x1) /
PHI;
105 if(iter > max_iter) {
110 return iter_result<real>((x2 + x1) / 2.0, iter,
abs(x2 - x1) / 2.0);
123 template<
typename RealFunction>
125 RealFunction f, RealFunction Df, RealFunction D2f,
129 iter_result<real> z =
root_newton(Df, D2f, guess, tolerance, max_iter);
138 return iter_result<real>(
145 return iter_result<real>(z, z.iterations, z.residual);
158 template<
typename RealFunction>
160 RealFunction f, RealFunction Df,
161 RealFunction D2f,
real guess = 0,
165 iter_result<real> z =
root_newton(Df, D2f, guess, tolerance, max_iter);
174 return iter_result<real>(
181 return iter_result<real>(z, z.iterations, z.residual);
194 template<
typename RealFunction>
196 RealFunction f, RealFunction Df,
201 iter_result<real> z =
root_bisect(Df, a, b, tolerance, max_iter);
211 return iter_result<real>(
218 return iter_result<real>(z, z.iterations, z.residual);
231 template<
typename RealFunction>
233 RealFunction f, RealFunction Df,
real a,
real b,
237 iter_result<real> z =
root_bisect(Df, a, b, tolerance, max_iter);
247 return iter_result<real>(
254 return iter_result<real>(z, z.iterations, z.residual);
#define TH_MATH_ERROR(F_NAME, VALUE, EXCEPTION)
TH_MATH_ERROR is a macro which throws exceptions or modifies errno (depending on which compilation op...
Definition error.h:238
Main namespace of the library which contains all functions and objects.
Definition algebra.h:27
double real
A real number, defined as a floating point type.
Definition constants.h:207
iter_result< real > maximize_golden(RealFunction f, real a, real b, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_GOLDENSECTION_ITER)
Approximate a function maximum using the Golden Section search algorithm.
Definition extrema.h:24
dual2 abs(dual2 x)
Compute the absolute value of a second order dual number.
Definition dual2_functions.h:198
constexpr real OPTIMIZATION_TOL
Approximation tolerance for root finding.
Definition constants.h:297
constexpr unsigned int OPTIMIZATION_GOLDENSECTION_ITER
Maximum number of iterations for the golden section search algorithm.
Definition constants.h:303
iter_result< real > maximize_newton(RealFunction f, RealFunction Df, RealFunction D2f, real guess=0.0, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_NEWTON_ITER)
Approximate a function maximum given the function and its first two derivatives using Newton-Raphson'...
Definition extrema.h:124
iter_result< real > minimize_newton(RealFunction f, RealFunction Df, RealFunction D2f, real guess=0, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_NEWTON_ITER)
Approximate a function minimum given the function and its first two derivatives using Newton-Raphson'...
Definition extrema.h:159
iter_result< real > root_bisect(RealFunction f, real a, real b, real tol=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_BISECTION_ITER)
Find the root of a univariate real function using bisection inside a compact interval [a,...
Definition roots.h:61
iter_result< real > minimize_goldensection(RealFunction f, real a, real b, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_GOLDENSECTION_ITER)
Approximate a function minimum using the Golden Section search algorithm.
Definition extrema.h:74
@ InvalidArgument
Invalid argument.
@ NoConvergence
Algorithm did not converge.
real deriv_central(RealFunction f, real x, real h=CALCULUS_DERIV_STEP)
Approximate the first derivative of a real function using the central method.
Definition deriv.h:73
constexpr unsigned int OPTIMIZATION_BISECTION_ITER
Maximum number of iterations for the bisection algorithm.
Definition constants.h:300
constexpr unsigned int OPTIMIZATION_NEWTON_ITER
Maximum number of iterations for the Newton-Raphson algorithm.
Definition constants.h:309
constexpr real PHI
The Phi (Golden Section) mathematical constant.
Definition constants.h:219
iter_result< real > root_newton(RealFunction f, RealFunction Df, real guess=0.0, real tol=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_NEWTON_ITER)
Find a root of a univariate real function using Newton's method.
Definition roots.h:220
@ Success
Algorithm converged successfully.
@ Diverged
Algorithm diverged.
@ MaxIterations
Maximum iterations exceeded.
@ InvalidInput
Invalid input provided.
iter_result< real > maximize_bisection(RealFunction f, RealFunction Df, real a, real b, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_BISECTION_ITER)
Approximate a function maximum inside an interval given the function and its first derivative using b...
Definition extrema.h:195
iter_result< real > minimize_bisect(RealFunction f, RealFunction Df, real a, real b, real tolerance=OPTIMIZATION_TOL, unsigned int max_iter=OPTIMIZATION_BISECTION_ITER)
Approximate a function minimum inside an interval given the function and its first derivative using b...
Definition extrema.h:232
Root approximation of real functions.