#include <iostream>
#include <animal/numrecipes/optimization/mnbrak.h>
#include <animal/numrecipes/optimization/golden.h>
#include <animal/numrecipes/optimization/brent.h>
#include <animal/numrecipes/optimization/dbrent.h>
double myFunction ( double x )
{
return (x-1)*(x-1) + 1;
}
double myDeriv ( double x )
{
return 2*(x-1);
}
main()
{
double a = 2, b=4, c, fa, fb, fc;
nr::mnbrak( &a,&b,&c, &fa,&fb,&fc, myFunction );
std::cout<<" mnbrak returns "<< a <<", "<< b <<","<< c <<", "<< fa <<", "<< fb
<<", "<< fc << std::endl;
double tol = 1.0e-3, minValue, location;
minValue = nr::golden( a,b,c, myFunction, tol, &location );
std::cout<<"golden: minimum value of "<< minValue <<" found at "<< location << std::endl;
minValue = nr::brent( a,b,c, myFunction, tol, &location );
std::cout<<"brent: minimum value of "<< minValue <<" found at "<< location << std::endl;
minValue = nr::dbrent( a,b,c, myFunction, myDeriv, tol, &location );
std::cout<<"dbrent: minimum value of "<< minValue <<" found at "<< location << std::endl;
}