Geant4-11
G4SimpleIntegration.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4SimpleIntegration
27//
28// Class description:
29//
30// Class for realisation of simple numerical methodes for integration of
31// functions with signature: double f(double). The methods based mainly on
32// algorithms given in the book:
33// An introduction to NUMERICAL METHODS IN C++,
34// B.H. Flowers, Claredon Press, Oxford, 1995.
35
36// Author: V.Grichine, 26.03.1997
37// --------------------------------------------------------------------
38#ifndef G4SIMPLEINTEGRATION_HH
39#define G4SIMPLEINTEGRATION_HH 1
40
41#include "G4Types.hh"
42
44
46{
47 public:
48 explicit G4SimpleIntegration(function pFunction);
49
50 G4SimpleIntegration(function pFunction, G4double pTolerance);
51
53
56 // Private copy constructor and assignment operator.
57
58 // Simple integration methods:
59 // Trapezoidal, MidPoint, Gauss and Simpson(double a,double b,int n)
60 // - integrate function pointed by fFunction from a to b by n iterations,
61 // i.e. with Step (b-a)/n according to the correspondent method.
62
63 G4double Trapezoidal(G4double xInitial, G4double xFinal,
64 G4int iterationNumber);
65
66 G4double MidPoint(G4double xInitial, G4double xFinal, G4int iterationNumber);
67
68 G4double Gauss(G4double xInitial, G4double xFinal, G4int iterationNumber);
69
70 G4double Simpson(G4double xInitial, G4double xFinal, G4int iterationNumber);
71
72 // Adaptive Gauss integration with accuracy ~ fTolerance
73
75 // Integrate function from a to be with accuracy <= fTolerance
76
77 protected:
78 G4double Gauss(G4double xInitial, G4double xFinal);
79
80 void AdaptGauss(G4double xInitial, G4double xFinal, G4double& sum,
81 G4int& depth);
82
83 private:
84 function fFunction; // pointer to the function to be integrated
85 G4double fTolerance = 0.0001; // accuracy of integration
86 const G4int fMaxDepth = 100; // constant maximum iteration depth
87};
88
89#endif
G4double(* function)(G4double)
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4SimpleIntegration & operator=(const G4SimpleIntegration &)=delete
G4double AdaptGaussIntegration(G4double xInitial, G4double xFinal)
G4double Gauss(G4double xInitial, G4double xFinal, G4int iterationNumber)
G4SimpleIntegration(function pFunction)
G4double Trapezoidal(G4double xInitial, G4double xFinal, G4int iterationNumber)
G4double Simpson(G4double xInitial, G4double xFinal, G4int iterationNumber)
void AdaptGauss(G4double xInitial, G4double xFinal, G4double &sum, G4int &depth)
G4SimpleIntegration(const G4SimpleIntegration &)=delete
G4double MidPoint(G4double xInitial, G4double xFinal, G4int iterationNumber)