1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #ifndef SOLVER_CPP_
#define SOLVER_CPP_
#include "Solver.h"
template<class T>
Solver<T>::Solver()
{
}
template<class T>
Solver<T>::Solver(double(T::*ptr)(double))
{
this->ptr = ptr;
}
template<class T>
double Solver<T>::f(double x)
{
return this->ptr(x);
}
template<class T>
double Solver<T>::goldenSectionSearch(double a, double b, double c, double epsilon)
{
double x;
if (c-b > b-a)
x = b + (2-M_PHI)*(c-b);
else
x = b - (2-M_PHI)*(b-a);
if (abs(c-a) < epsilon*(abs(b) + abs(x)))
return (c+a)/2.0;
if (f(x) < f(b))
{
if (c-b > b-a)
return goldenSectionSearch(b, x, c, epsilon);
else
return goldenSectionSearch(a, x, b, epsilon);
}
else
{
if (c-b > b-a)
return goldenSectionSearch(a, b, x, epsilon);
else
return goldenSectionSearch(x, b, c, epsilon);
}
}
#endif |
Partager