https://github.com/root-project/root
Raw File
Tip revision: 5bd3996b0d14dd5a22c89c58c346ffda5c0d2e20 authored by Fons Rademakers on 28 June 2011, 09:48:03 UTC
tag pro version v5-30-00.
Tip revision: 5bd3996
exampleMultiRoot.C
// example of using multiroot finder 
// based on GSL algorithm 
// Find the root of Rosenbrock system of equations
// f1(x,y) = a(1-x)
// f2(x,y) = b(y-x^2)
//  with 1 = 1, b=10
//  
// The MultiRootFinder is based on GSL and it requires the MathMore library 
// installed 
//
// Usage: 
//  >.x exampleMultiRoot.C()
// or 
// >.x exampleMultiRoot(algoname,printlevel)
//
// where algoname is for an algorithm not using the derivatives:
//  hybridS (default) , hybrid, dnewton, broyden
// 
#include "RConfigure.h"

#ifdef R__HAS_MATHMORE
#include "Math/MultiRootFinder.h"
#endif
#include "Math/WrappedMultiTF1.h"
#include "TF2.h"
#include "TError.h"

// example of using multi root finder based on GSL 
// need to use an algorithm not requiring the derivative
//like hybrids (default), hybrid, dnewton, broyden

using namespace ROOT::Math; 
void exampleMultiRoot(const char * algo = 0, int printlevel = 1) { 

#ifndef R__HAS_MATHMORE
   Error("exampleMultiRoot","libMathMore is not available - cannot run this tutorial");
#else 


   ROOT::Math::MultiRootFinder r(algo);
    //defining the function
   // use Rosenbrock functions
   TF2 * f1 = new TF2("f1","[0]*(1-x)+[1]*y");
   TF2 * f2 = new TF2("f2","[0]*(y-x*x)");
   f1->SetParameters(1,0);
   f2->SetParameter(0,10);
   // wrap the functions
   ROOT::Math::WrappedMultiTF1 g1(*f1,2);
   ROOT::Math::WrappedMultiTF1 g2(*f2,2);
   r.AddFunction(g1);
   r.AddFunction(g2);
   r.SetPrintLevel(printlevel);

   // starting point
   double x0[2]={-1,-1};
   r.Solve(x0);
#endif
   
}

back to top