G4SimpleIntegration Class Reference

#include <G4SimpleIntegration.hh>


Public Member Functions

 G4SimpleIntegration (function pFunction)
 G4SimpleIntegration (function pFunction, G4double pTolerance)
 ~G4SimpleIntegration ()
G4double Trapezoidal (G4double xInitial, G4double xFinal, G4int iterationNumber)
G4double MidPoint (G4double xInitial, G4double xFinal, G4int iterationNumber)
G4double Gauss (G4double xInitial, G4double xFinal, G4int iterationNumber)
G4double Simpson (G4double xInitial, G4double xFinal, G4int iterationNumber)
G4double AdaptGaussIntegration (G4double xInitial, G4double xFinal)

Protected Member Functions

G4double Gauss (G4double xInitial, G4double xFinal)
void AdaptGauss (G4double xInitial, G4double xFinal, G4double &sum, G4int &depth)


Detailed Description

Definition at line 64 of file G4SimpleIntegration.hh.


Constructor & Destructor Documentation

G4SimpleIntegration::G4SimpleIntegration ( function  pFunction  )  [explicit]

Definition at line 39 of file G4SimpleIntegration.cc.

00040    : fFunction(pFunction),
00041      fTolerance(.0001)
00042 {
00043 }

G4SimpleIntegration::G4SimpleIntegration ( function  pFunction,
G4double  pTolerance 
)

Definition at line 45 of file G4SimpleIntegration.cc.

00047    : fFunction(pFunction),
00048      fTolerance(pTolerance)
00049 {
00050 }

G4SimpleIntegration::~G4SimpleIntegration (  ) 

Definition at line 53 of file G4SimpleIntegration.cc.

00054 {
00055 }


Member Function Documentation

void G4SimpleIntegration::AdaptGauss ( G4double  xInitial,
G4double  xFinal,
G4double sum,
G4int depth 
) [protected]

Definition at line 161 of file G4SimpleIntegration.cc.

References FatalException, G4Exception(), and Gauss().

Referenced by AdaptGaussIntegration().

00165 {
00166    if(depth >fMaxDepth)
00167    {
00168       G4Exception("G4SimpleIntegration::AdaptGauss()", "Error",
00169                   FatalException, "Function varies too rapidly !") ;
00170    }
00171    G4double xMean = (xInitial + xFinal)/2.0 ;
00172    G4double leftHalf = Gauss(xInitial,xMean) ;
00173    G4double rightHalf = Gauss(xMean,xFinal) ;
00174    G4double full = Gauss(xInitial,xFinal) ;
00175    if(std::fabs(leftHalf+rightHalf-full) < fTolerance)
00176    {
00177       sum += full ;
00178    }
00179    else
00180    {
00181       depth++ ;
00182       AdaptGauss(xInitial,xMean,sum,depth) ;
00183       AdaptGauss(xMean,xFinal,sum,depth) ;
00184    }
00185 }

G4double G4SimpleIntegration::AdaptGaussIntegration ( G4double  xInitial,
G4double  xFinal 
)

Definition at line 135 of file G4SimpleIntegration.cc.

References AdaptGauss().

00137 {
00138    G4int depth = 0 ;
00139    G4double sum = 0.0 ;
00140    AdaptGauss(xInitial,xFinal,sum,depth) ;
00141    return sum ;
00142 }

G4double G4SimpleIntegration::Gauss ( G4double  xInitial,
G4double  xFinal 
) [protected]

Definition at line 146 of file G4SimpleIntegration.cc.

00148 {
00149    static G4double root = 1.0/std::sqrt(3.0) ;
00150    
00151    G4double xMean = (xInitial + xFinal)/2.0 ;
00152    G4double Step = (xFinal - xInitial)/2.0 ;
00153    G4double delta = Step*root ;
00154    G4double sum = (fFunction(xMean + delta) + fFunction(xMean - delta)) ;
00155    
00156    return sum*Step ;   
00157 }

G4double G4SimpleIntegration::Gauss ( G4double  xInitial,
G4double  xFinal,
G4int  iterationNumber 
)

Definition at line 92 of file G4SimpleIntegration.cc.

Referenced by AdaptGauss().

00095 {
00096    G4double x=0.;
00097    static G4double root = 1.0/std::sqrt(3.0) ;
00098    G4double Step = (xFinal - xInitial)/(2.0*iterationNumber) ;
00099    G4double delta = Step*root ;
00100    G4double mean = 0.0 ;
00101    for(G4int i=0;i<iterationNumber;i++)
00102    {
00103       x = (2*i + 1)*Step ;
00104       mean += (fFunction(x+delta) + fFunction(x-delta)) ;
00105    }
00106    return mean*Step ;   
00107 }

G4double G4SimpleIntegration::MidPoint ( G4double  xInitial,
G4double  xFinal,
G4int  iterationNumber 
)

Definition at line 76 of file G4SimpleIntegration.cc.

00079 {
00080    G4double Step = (xFinal - xInitial)/iterationNumber ;
00081    G4double x = xInitial + 0.5*Step;
00082    G4double mean = fFunction(x) ;
00083    for(G4int i=1;i<iterationNumber;i++)
00084    {
00085       x += Step ;
00086       mean += fFunction(x) ;
00087    }
00088    return mean*Step ;   
00089 }

G4double G4SimpleIntegration::Simpson ( G4double  xInitial,
G4double  xFinal,
G4int  iterationNumber 
)

Definition at line 110 of file G4SimpleIntegration.cc.

00113 {
00114    G4double Step = (xFinal - xInitial)/iterationNumber ;
00115    G4double x = xInitial ;
00116    G4double xPlus = xInitial + 0.5*Step ;
00117    G4double mean = (fFunction(xInitial) + fFunction(xFinal))*0.5 ;
00118    G4double sum = fFunction(xPlus) ;
00119    for(G4int i=1;i<iterationNumber;i++)
00120    {
00121       x     += Step ;
00122       xPlus += Step ;
00123       mean  += fFunction(x) ;
00124       sum   += fFunction(xPlus) ;
00125    }
00126    mean += 2.0*sum ;
00127    return mean*Step/3.0 ;   
00128 }

G4double G4SimpleIntegration::Trapezoidal ( G4double  xInitial,
G4double  xFinal,
G4int  iterationNumber 
)

Definition at line 60 of file G4SimpleIntegration.cc.

00063 {
00064    G4double Step = (xFinal - xInitial)/iterationNumber ;
00065    G4double mean = (fFunction(xInitial) + fFunction(xFinal))*0.5 ;
00066    G4double x = xInitial ;
00067    for(G4int i=1;i<iterationNumber;i++)
00068    {
00069       x += Step ;
00070       mean += fFunction(x) ;
00071    }
00072    return mean*Step ;
00073 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:53:23 2013 for Geant4 by  doxygen 1.4.7