// @(#)root/mathmore:$Id$
// Author: L. Moneta, A. Zsenei   08/2005

 /**********************************************************************
  *                                                                    *
  * Copyright (c) 2004 ROOT Foundation,  CERN/PH-SFT                   *
  *                                                                    *
  * This library is free software; you can redistribute it and/or      *
  * modify it under the terms of the GNU General Public License        *
  * as published by the Free Software Foundation; either version 2     *
  * of the License, or (at your option) any later version.             *
  *                                                                    *
  * This library is distributed in the hope that it will be useful,    *
  * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   *
  * General Public License for more details.                           *
  *                                                                    *
  * You should have received a copy of the GNU General Public License  *
  * along with this library (see file COPYING); if not, write          *
  * to the Free Software Foundation, Inc., 59 Temple Place, Suite      *
  * 330, Boston, MA 02111-1307 USA, or contact the author.             *
  *                                                                    *
  **********************************************************************/

// Header file for GSL ROOT Finder Algorithms
//
// Created by: moneta  at Sun Nov 14 14:07:50 2004
//
// Last update: Sun Nov 14 14:07:50 2004
//
#ifndef ROOT_Math_GSLRootFinderAlgorithms
#define ROOT_Math_GSLRootFinderAlgorithms


#ifndef ROOT_Math_GSLRootFinder
#include "Math/GSLRootFinder.h"
#endif

#ifndef ROOT_Math_GSLRootFinderDeriv
#include "Math/GSLRootFinderDeriv.h"
#endif

namespace ROOT {
namespace Math {

  /**
     Root-Finding Algorithms

  */

namespace Roots {

//________________________________________________________________________________________________________
     /**
        Roots::Bisection
      Bisection algorithm, simplest algorithm for bracketing the roots of a function, but slowest one.
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Bracketing-Algorithms.html">GSL manual</A> for more information
      @ingroup RootFinders
     */

   class Bisection : public GSLRootFinder {

   public:

      Bisection();
      virtual ~Bisection();

   private:
      // usually copying is non trivial, so we make this unaccessible

      Bisection(const Bisection &);
      Bisection & operator = (const Bisection &);

   };

//________________________________________________________________________________________________________
   /**
      False Position algorithm based on linear interpolation.
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Bracketing-Algorithms.html">GSL manual</A> for more information
      @ingroup RootFinders
   */

   class FalsePos : public GSLRootFinder {

   public:

      FalsePos();
      virtual ~FalsePos();

   private:
      // usually copying is non trivial, so we make this unaccessible
      FalsePos(const FalsePos &);
      FalsePos & operator = (const FalsePos &);

   };



//________________________________________________________________________________________________________
   /**
      Brent-Dekker algorithm which combines an interpolation strategy with the bisection algorithm
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Bracketing-Algorithms.html">
      GSL manual</A> for more information

      @ingroup RootFinders
   */

   class Brent : public GSLRootFinder {

   public:

      Brent();
      virtual ~Brent();

   private:
      // usually copying is non trivial, so we make this unaccessible
      Brent(const Brent &);
      Brent & operator = (const Brent &);

   };


   //----------------------------------------------------------------------
   // algorithm with derivatives
   //----------------------------------------------------------------------

//________________________________________________________________________________________________________
   /**
      a Newton algorithm, which computes the derivative at each iteration
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Finding-Algorithms-using-Derivatives.html">
      GSL manual</A> for more information

      @ingroup RootFinders
   */

   class Newton : public GSLRootFinderDeriv {

   public:

      Newton();
      virtual ~Newton();

   private:
      // usually copying is non trivial, so we make this unaccessible
      Newton(const Newton &);
      Newton & operator = (const Newton &);

   };


//________________________________________________________________________________________________________
   /**
      \a Secant algorithm, simplified version of Newton method, which does not require the derivative at every step.
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Finding-Algorithms-using-Derivatives.html">
      GSL manual</A> for more information
      @ingroup RootFinders
   */

   class Secant : public GSLRootFinderDeriv {

   public:

      Secant();
      virtual ~Secant();

   private:
      // usually copying is non trivial, so we make this unaccessible
      Secant(const Secant &);
      Secant & operator = (const Secant &);

   };

//________________________________________________________________________________________________________
   /**
      \a Steffenson method, providing the fastes convergence.
      See the <A HREF="http://www.gnu.org/software/gsl/manual/html_node/Root-Finding-Algorithms-using-Derivatives.html">
      GSL manual</A> for more information

      @ingroup RootFinders
   */

   class Steffenson : public GSLRootFinderDeriv {

   public:

      Steffenson();
      virtual ~Steffenson();

   private:
      // usually copying is non trivial, so we make this unaccessible
      Steffenson(const Steffenson &);
      Steffenson & operator = (const Steffenson &);

   };


}

} // namespace Math
} // namespace ROOT


#endif /* ROOT_Math_GSLRootFinderAlgorithms */
 RootFinderAlgorithms.h:1
 RootFinderAlgorithms.h:2
 RootFinderAlgorithms.h:3
 RootFinderAlgorithms.h:4
 RootFinderAlgorithms.h:5
 RootFinderAlgorithms.h:6
 RootFinderAlgorithms.h:7
 RootFinderAlgorithms.h:8
 RootFinderAlgorithms.h:9
 RootFinderAlgorithms.h:10
 RootFinderAlgorithms.h:11
 RootFinderAlgorithms.h:12
 RootFinderAlgorithms.h:13
 RootFinderAlgorithms.h:14
 RootFinderAlgorithms.h:15
 RootFinderAlgorithms.h:16
 RootFinderAlgorithms.h:17
 RootFinderAlgorithms.h:18
 RootFinderAlgorithms.h:19
 RootFinderAlgorithms.h:20
 RootFinderAlgorithms.h:21
 RootFinderAlgorithms.h:22
 RootFinderAlgorithms.h:23
 RootFinderAlgorithms.h:24
 RootFinderAlgorithms.h:25
 RootFinderAlgorithms.h:26
 RootFinderAlgorithms.h:27
 RootFinderAlgorithms.h:28
 RootFinderAlgorithms.h:29
 RootFinderAlgorithms.h:30
 RootFinderAlgorithms.h:31
 RootFinderAlgorithms.h:32
 RootFinderAlgorithms.h:33
 RootFinderAlgorithms.h:34
 RootFinderAlgorithms.h:35
 RootFinderAlgorithms.h:36
 RootFinderAlgorithms.h:37
 RootFinderAlgorithms.h:38
 RootFinderAlgorithms.h:39
 RootFinderAlgorithms.h:40
 RootFinderAlgorithms.h:41
 RootFinderAlgorithms.h:42
 RootFinderAlgorithms.h:43
 RootFinderAlgorithms.h:44
 RootFinderAlgorithms.h:45
 RootFinderAlgorithms.h:46
 RootFinderAlgorithms.h:47
 RootFinderAlgorithms.h:48
 RootFinderAlgorithms.h:49
 RootFinderAlgorithms.h:50
 RootFinderAlgorithms.h:51
 RootFinderAlgorithms.h:52
 RootFinderAlgorithms.h:53
 RootFinderAlgorithms.h:54
 RootFinderAlgorithms.h:55
 RootFinderAlgorithms.h:56
 RootFinderAlgorithms.h:57
 RootFinderAlgorithms.h:58
 RootFinderAlgorithms.h:59
 RootFinderAlgorithms.h:60
 RootFinderAlgorithms.h:61
 RootFinderAlgorithms.h:62
 RootFinderAlgorithms.h:63
 RootFinderAlgorithms.h:64
 RootFinderAlgorithms.h:65
 RootFinderAlgorithms.h:66
 RootFinderAlgorithms.h:67
 RootFinderAlgorithms.h:68
 RootFinderAlgorithms.h:69
 RootFinderAlgorithms.h:70
 RootFinderAlgorithms.h:71
 RootFinderAlgorithms.h:72
 RootFinderAlgorithms.h:73
 RootFinderAlgorithms.h:74
 RootFinderAlgorithms.h:75
 RootFinderAlgorithms.h:76
 RootFinderAlgorithms.h:77
 RootFinderAlgorithms.h:78
 RootFinderAlgorithms.h:79
 RootFinderAlgorithms.h:80
 RootFinderAlgorithms.h:81
 RootFinderAlgorithms.h:82
 RootFinderAlgorithms.h:83
 RootFinderAlgorithms.h:84
 RootFinderAlgorithms.h:85
 RootFinderAlgorithms.h:86
 RootFinderAlgorithms.h:87
 RootFinderAlgorithms.h:88
 RootFinderAlgorithms.h:89
 RootFinderAlgorithms.h:90
 RootFinderAlgorithms.h:91
 RootFinderAlgorithms.h:92
 RootFinderAlgorithms.h:93
 RootFinderAlgorithms.h:94
 RootFinderAlgorithms.h:95
 RootFinderAlgorithms.h:96
 RootFinderAlgorithms.h:97
 RootFinderAlgorithms.h:98
 RootFinderAlgorithms.h:99
 RootFinderAlgorithms.h:100
 RootFinderAlgorithms.h:101
 RootFinderAlgorithms.h:102
 RootFinderAlgorithms.h:103
 RootFinderAlgorithms.h:104
 RootFinderAlgorithms.h:105
 RootFinderAlgorithms.h:106
 RootFinderAlgorithms.h:107
 RootFinderAlgorithms.h:108
 RootFinderAlgorithms.h:109
 RootFinderAlgorithms.h:110
 RootFinderAlgorithms.h:111
 RootFinderAlgorithms.h:112
 RootFinderAlgorithms.h:113
 RootFinderAlgorithms.h:114
 RootFinderAlgorithms.h:115
 RootFinderAlgorithms.h:116
 RootFinderAlgorithms.h:117
 RootFinderAlgorithms.h:118
 RootFinderAlgorithms.h:119
 RootFinderAlgorithms.h:120
 RootFinderAlgorithms.h:121
 RootFinderAlgorithms.h:122
 RootFinderAlgorithms.h:123
 RootFinderAlgorithms.h:124
 RootFinderAlgorithms.h:125
 RootFinderAlgorithms.h:126
 RootFinderAlgorithms.h:127
 RootFinderAlgorithms.h:128
 RootFinderAlgorithms.h:129
 RootFinderAlgorithms.h:130
 RootFinderAlgorithms.h:131
 RootFinderAlgorithms.h:132
 RootFinderAlgorithms.h:133
 RootFinderAlgorithms.h:134
 RootFinderAlgorithms.h:135
 RootFinderAlgorithms.h:136
 RootFinderAlgorithms.h:137
 RootFinderAlgorithms.h:138
 RootFinderAlgorithms.h:139
 RootFinderAlgorithms.h:140
 RootFinderAlgorithms.h:141
 RootFinderAlgorithms.h:142
 RootFinderAlgorithms.h:143
 RootFinderAlgorithms.h:144
 RootFinderAlgorithms.h:145
 RootFinderAlgorithms.h:146
 RootFinderAlgorithms.h:147
 RootFinderAlgorithms.h:148
 RootFinderAlgorithms.h:149
 RootFinderAlgorithms.h:150
 RootFinderAlgorithms.h:151
 RootFinderAlgorithms.h:152
 RootFinderAlgorithms.h:153
 RootFinderAlgorithms.h:154
 RootFinderAlgorithms.h:155
 RootFinderAlgorithms.h:156
 RootFinderAlgorithms.h:157
 RootFinderAlgorithms.h:158
 RootFinderAlgorithms.h:159
 RootFinderAlgorithms.h:160
 RootFinderAlgorithms.h:161
 RootFinderAlgorithms.h:162
 RootFinderAlgorithms.h:163
 RootFinderAlgorithms.h:164
 RootFinderAlgorithms.h:165
 RootFinderAlgorithms.h:166
 RootFinderAlgorithms.h:167
 RootFinderAlgorithms.h:168
 RootFinderAlgorithms.h:169
 RootFinderAlgorithms.h:170
 RootFinderAlgorithms.h:171
 RootFinderAlgorithms.h:172
 RootFinderAlgorithms.h:173
 RootFinderAlgorithms.h:174
 RootFinderAlgorithms.h:175
 RootFinderAlgorithms.h:176
 RootFinderAlgorithms.h:177
 RootFinderAlgorithms.h:178
 RootFinderAlgorithms.h:179
 RootFinderAlgorithms.h:180
 RootFinderAlgorithms.h:181
 RootFinderAlgorithms.h:182
 RootFinderAlgorithms.h:183
 RootFinderAlgorithms.h:184
 RootFinderAlgorithms.h:185
 RootFinderAlgorithms.h:186
 RootFinderAlgorithms.h:187
 RootFinderAlgorithms.h:188
 RootFinderAlgorithms.h:189
 RootFinderAlgorithms.h:190
 RootFinderAlgorithms.h:191
 RootFinderAlgorithms.h:192
 RootFinderAlgorithms.h:193
 RootFinderAlgorithms.h:194
 RootFinderAlgorithms.h:195
 RootFinderAlgorithms.h:196
 RootFinderAlgorithms.h:197
 RootFinderAlgorithms.h:198
 RootFinderAlgorithms.h:199
 RootFinderAlgorithms.h:200
 RootFinderAlgorithms.h:201
 RootFinderAlgorithms.h:202
 RootFinderAlgorithms.h:203