gsl_inte_qagi.h

00001 /*
00002   -------------------------------------------------------------------
00003   
00004   Copyright (C) 2006, 2007, 2008, Andrew W. Steiner
00005   
00006   This file is part of O2scl.
00007   
00008   O2scl is free software; you can redistribute it and/or modify
00009   it under the terms of the GNU General Public License as published by
00010   the Free Software Foundation; either version 3 of the License, or
00011   (at your option) any later version.
00012   
00013   O2scl is distributed in the hope that it will be useful,
00014   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016   GNU General Public License for more details.
00017   
00018   You should have received a copy of the GNU General Public License
00019   along with O2scl. If not, see <http://www.gnu.org/licenses/>.
00020 
00021   -------------------------------------------------------------------
00022 */
00023 #ifndef O2SCL_GSL_INTE_QAGI_H
00024 #define O2SCL_GSL_INTE_QAGI_H
00025 
00026 #include <o2scl/inte.h>
00027 #include <o2scl/gsl_inte_qags.h>
00028 
00029 #ifndef DOXYGENP
00030 namespace o2scl {
00031 #endif
00032 
00033   /** \brief Integrate a function from \f$ -\infty \f$ to \f$ \infty \f$ 
00034       (GSL)
00035    */
00036   template<class param_t, class func_t> class gsl_inte_qagi : 
00037   public gsl_inte_transform<param_t,func_t> {
00038     
00039     public:
00040       
00041       /** \brief Integrate function \c func from \f$ -\infty \f$ to 
00042           \f$ \infty \f$ 
00043 
00044           The values given in \c a and \c b are ignored
00045       */
00046       virtual double integ(func_t &func, double a, double b, param_t &pa) {
00047         double res, err;
00048         integ_err(func,a,b,pa,res,err);
00049         this->interror=err;
00050         return res;
00051       }
00052       
00053       /** \brief Integrate function \c func from \f$ \infty \f$ 
00054           to \f$ \infty \f$ giving result \c res and error \c err
00055           
00056           The values \c a and \c b are ignored
00057       */
00058       virtual int integ_err(func_t &func, double a, double b, 
00059                             param_t &pa, double &res, double &err2) {
00060         
00061         double fv1[8], fv2[8];
00062         
00063         int status=qags(func,8,o2scl_inte_qag_coeffs::qk15_xgk,
00064                         o2scl_inte_qag_coeffs::qk15_wg,
00065                         o2scl_inte_qag_coeffs::qk15_wgk,
00066                         fv1,fv2,0.0,1.0,this->tolx,this->tolf,
00067                         this->wkspace,&res,&err2,pa);
00068         return status;
00069         
00070       }
00071 
00072 #ifndef DOXYGEN_INTERNAL
00073 
00074     protected:
00075       
00076       /// Tranformation to \f$ t \in (0,1] \f$ 
00077       virtual double transform(func_t &func, double t, param_t &pa) {
00078         double x=(1-t)/t, y1, y2;
00079         func(x,y1,pa);
00080         func(-x,y2,pa);
00081         return (y1+y2)/t/t;
00082       }
00083       
00084 #endif
00085       
00086     };
00087   
00088 #ifndef DOXYGENP
00089 }
00090 #endif
00091 
00092 #endif

Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.

Project hosting provided by SourceForge.net Logo, O2scl Sourceforge Project Page