#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) |
Definition at line 64 of file G4SimpleIntegration.hh.
G4SimpleIntegration::G4SimpleIntegration | ( | function | pFunction | ) | [explicit] |
G4SimpleIntegration::~G4SimpleIntegration | ( | ) |
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 }
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 }
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 }
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 }
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 }