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: a = 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
Author: Lorenzo Moneta
This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Tuesday, March 19, 2024 at 07:12 PM.
%%cpp -d
#include "RConfigure.h"
#ifdef R__HAS_MATHMORE
#include "Math/MultiRootFinder.h"
#else
#error libMathMore is not available - cannot run this tutorial
#endif
#include "Math/WrappedMultiTF1.h"
#include "TF2.h"
#include "TError.h"
using namespace ROOT::Math;
Arguments are defined.
const char * algo = nullptr;
int printlevel = 1;
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);
GSLMultiRootFinder::Solve:hybrids max iterations 100 and tolerance 1e-06 GSL Algorithm used is : hybrids Number of iterations = 19 Root values = x[0] = 1 x[1] = 1 Function values = f[0] = 0 f[1] = -6.17162e-11
Info in <ROOT::Math::GSLMultiRootFinder::Solve>: The iteration converged