Logo ROOT  
Reference Guide
NumericalMinimization.C File Reference

Detailed Description

View in nbviewer Open in SWAN 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[0];
const Double_t y = xx[1];
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
// Minuit /Minuit2 Migrad, Simplex,Combined,Scan (default is Migrad)
// 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[2] = {0.01,0.01};
// starting point
double variable[2] = { -1.,1.2};
if (randomSeed >= 0) {
TRandom2 r(randomSeed);
variable[0] = r.Uniform(-20,20);
variable[1] = r.Uniform(-20,20);
}
minimum->SetFunction(f);
// Set the free variables to be minimized !
minimum->SetVariable(0,"x",variable[0], step[0]);
minimum->SetVariable(1,"y",variable[1], step[1]);
// do the minimization
minimum->Minimize();
const double *xs = minimum->X();
std::cout << "Minimum: f(" << xs[0] << "," << xs[1] << "): "
<< 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;
}
Author
Lorenzo Moneta

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