2 #ifndef NAEquationSolver_h
3 #define NAEquationSolver_h 1
8 Nikolai Amelin, Ludmila Malinina, Timur Pocheptsov (C) JINR/Dubna
9 amelin@sunhe.jinr.ru, malinina@sunhe.jinr.ru, pocheptsov@sunhe.jinr.ru
13 //This equation solver class is taken from GEANT4 and modified!!
16 #define DefaultTolerance 5.0e-14
18 template <class Function>
19 class NAEquationSolver {
22 enum {DefaultMaxIter = 100};
25 // Maximum number of iterations
28 // interval limits [a,b] which should bracket the root
35 // default constructor
36 NAEquationSolver() : fMaxIter(DefaultMaxIter), fTolerance(DefaultTolerance),
37 fA(0.0), fB(0.0), fRoot(0.0) {};
39 NAEquationSolver(const Int_t iterations, const Double_t tol) :
40 fMaxIter(iterations), fTolerance(tol),
41 fA(0.0), fB(0.0), fRoot(0.0) {};
44 NAEquationSolver(const NAEquationSolver & right);
47 ~NAEquationSolver() {};
50 NAEquationSolver & operator=(const NAEquationSolver & right);
51 Bool_t operator==(const NAEquationSolver & right) const;
52 Bool_t operator!=(const NAEquationSolver & right) const;
54 Int_t GetMaxIterations(void) const {return fMaxIter;}
55 void SetMaxIterations(const Int_t iterations) {fMaxIter=iterations;}
57 Double_t GetTolerance(void) const {return fTolerance;}
58 void SetTolerance(const Double_t epsilon) {fTolerance = epsilon;}
60 Double_t GetIntervalLowerLimit(void) const {return fA;}
61 Double_t GetIntervalUpperLimit(void) const {return fB;}
63 void SetIntervalLimits(const Double_t Limit1, const Double_t Limit2);
65 Double_t GetRoot(void) const {return fRoot;}
67 // Calculates the root by the Brent's method
68 Bool_t Brent(Function& theFunction);
71 #include "EquationSolver.icc"