 ROOT   Reference Guide NumericalMinimization.C File Reference

## Detailed Description  Example on how to use the new Minimizer class in ROOT Show usage with all the possible minimizers. Minimize the Rosenbrock function (a 2D -function) This example is described also in http://root.cern.ch/drupal/content/numerical-minimization#multidim_minim input : minimizer name + algorithm name randomSeed: = <0 : fixed value: 0 random with seed 0; >0 random with given seed

#include "Math/Minimizer.h"
#include "Math/Factory.h"
#include "Math/Functor.h"
#include "TRandom2.h"
#include "TError.h"
#include <iostream>
double RosenBrock(const double *xx )
{
const Double_t x = xx;
const Double_t y = xx;
const Double_t tmp1 = y-x*x;
const Double_t tmp2 = 1-x;
return 100*tmp1*tmp1+tmp2*tmp2;
}
int NumericalMinimization(const char * minName = "Minuit2",
const char *algoName = "" ,
int randomSeed = -1)
{
// create minimizer giving a name and a name (optionally) for the specific
// algorithm
// possible choices are:
// minName algoName
// Minuit2 Fumili2
// Fumili
// GSLMultiMin ConjugateFR, ConjugatePR, BFGS,
// BFGS2, SteepestDescent
// GSLMultiFit
// GSLSimAn
// Genetic
// set tolerance , etc...
minimum->SetMaxFunctionCalls(1000000); // for Minuit/Minuit2
minimum->SetMaxIterations(10000); // for GSL
minimum->SetTolerance(0.001);
minimum->SetPrintLevel(1);
// create function wrapper for minimizer
// a IMultiGenFunction type
ROOT::Math::Functor f(&RosenBrock,2);
double step = {0.01,0.01};
// starting point
double variable = { -1.,1.2};
if (randomSeed >= 0) {
TRandom2 r(randomSeed);
variable = r.Uniform(-20,20);
variable = r.Uniform(-20,20);
}
minimum->SetFunction(f);
// Set the free variables to be minimized !
minimum->SetVariable(0,"x",variable, step);
minimum->SetVariable(1,"y",variable, step);
// do the minimization
minimum->Minimize();
const double *xs = minimum->X();
std::cout << "Minimum: f(" << xs << "," << xs << "): "
<< minimum->MinValue() << std::endl;
// expected minimum is 0
if ( minimum->MinValue() < 1.E-4 && f(xs) < 1.E-4)
std::cout << "Minimizer " << minName << " - " << algoName
<< " converged to the right minimum" << std::endl;
else {
std::cout << "Minimizer " << minName << " - " << algoName
<< " failed to converge !!!" << std::endl;
Error("NumericalMinimization","fail to converge");
}
return 0;
}

Definition in file NumericalMinimization.C.

Minimizer.h
f
#define f(i)
Definition: RSha256.hxx:122
ROOT::Math::Minimizer::X
virtual const double * X() const =0
return pointer to X values at the minimum
Functor.h
ROOT::Math::Minimizer::Minimize
virtual bool Minimize()=0
method to perform the minimization
TRandom2.h
r
ROOT::R::TRInterface & r
Definition: Object.C:4
ROOT::Math::Minimizer::SetMaxIterations
void SetMaxIterations(unsigned int maxiter)
set maximum iterations (one iteration can have many function calls)
Definition: Minimizer.h:455
ROOT::Math::Minimizer::SetPrintLevel
void SetPrintLevel(int level)
set print level
Definition: Minimizer.h:449
x
Double_t x[n]
Definition: legend1.C:17
Factory.h
ROOT::Math::Minimizer::MinValue
virtual double MinValue() const =0
return minimum function value
ROOT::Math::Factory::CreateMinimizer
static ROOT::Math::Minimizer * CreateMinimizer(const std::string &minimizerType="", const std::string &algoType="")
static method to create the corrisponding Minimizer given the string Supported Minimizers types are: ...
Definition: Factory.cxx:63
TRandom2
Definition: TRandom2.h:27
ROOT::Math::Minimizer::SetFunction
virtual void SetFunction(const ROOT::Math::IMultiGenFunction &func)=0
set the function to minimize
ROOT::Math::Minimizer::SetTolerance
void SetTolerance(double tol)
set the tolerance
Definition: Minimizer.h:458
y
Double_t y[n]
Definition: legend1.C:17
ROOT::Math::Minimizer::SetMaxFunctionCalls
void SetMaxFunctionCalls(unsigned int maxfcn)
set maximum of function calls
Definition: Minimizer.h:452
Double_t
double Double_t
Definition: RtypesCore.h:59
ROOT::Math::Minimizer
Abstract Minimizer class, defining the interface for the various minimizer (like Minuit2,...
Definition: Minimizer.h:80
ROOT::Math::Minimizer::SetVariable
virtual bool SetVariable(unsigned int ivar, const std::string &name, double val, double step)=0
set a new free variable
TMath::E
constexpr Double_t E()
Base of natural log:
Definition: TMath.h:102
ROOT::Math::Functor
Documentation for class Functor class.
Definition: Functor.h:408
Error
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
Definition: TError.cxx:187
TError.h