43 : fFunction(pFunction), fNumber(n),
44 fChebyshevCof(new
G4double[fNumber]),
45 fMean(0.5*(b+a)), fDiff(0.5*(b-a))
53 for (i=0;i<fNumber;i++)
55 rootSum = std::cos(cof*(i+0.5)) ;
56 tempFunction[i]= fFunction(rootSum*fDiff+fMean) ;
58 for (j=0;j<fNumber;j++)
63 for (i=0;i<fNumber;i++)
65 rootSum += tempFunction[i]*std::cos(cofj*(i+0.5)) ;
67 fChebyshevCof[j] = weight*rootSum ;
69 delete[] tempFunction ;
83 : fFunction(pFunction), fNumber(nx),
84 fChebyshevCof(new
G4double[fNumber]),
85 fMean(0.5*(b+a)), fDiff(0.5*(b-a))
89 G4Exception(
"G4ChebyshevApproximation::G4ChebyshevApproximation()",
98 for (i=0;i<fNumber;i++)
100 rootSum = std::cos(cof*(i+0.5)) ;
101 tempFunction[i] = fFunction(rootSum*fDiff+fMean) ;
103 for (j=0;j<fNumber;j++)
108 for (i=0;i<fNumber;i++)
110 rootSum += tempFunction[i]*std::cos(cofj*(i+0.5)) ;
112 fChebyshevCof[j] = weight*rootSum ;
120 for(j=0;j<fNumber;j++)
122 fChebyshevCof[j] = tempFunction[j] ;
125 delete[] tempFunction ;
137 : fFunction(pFunction), fNumber(n),
138 fChebyshevCof(new
G4double[fNumber]),
139 fMean(0.5*(b+a)), fDiff(0.5*(b-a))
147 for (i=0;i<fNumber;i++)
149 rootSum = std::cos(cof*(i+0.5)) ;
150 tempFunction[i]= fFunction(rootSum*fDiff+fMean) ;
152 for (j=0;j<fNumber;j++)
157 for (i=0;i<fNumber;i++)
159 rootSum += tempFunction[i]*std::cos(cofj*(i+0.5)) ;
161 fChebyshevCof[j] = weight*rootSum ;
166 for(j=0;j<fNumber;j++)
168 fChebyshevCof[j] = tempFunction[j] ;
170 delete[] tempFunction ;
181 delete[] fChebyshevCof ;
193 if(number < 0 && number >= fNumber)
195 G4Exception(
"G4ChebyshevApproximation::GetChebyshevCof()",
198 return fChebyshevCof[number] ;
209 G4double evaluate = 0.0, evaluate2 = 0.0, temp = 0.0,
210 xReduced = 0.0, xReduced2 = 0.0 ;
212 if ((x-fMean+fDiff)*(x-fMean-fDiff) > 0.0)
214 G4Exception(
"G4ChebyshevApproximation::ChebyshevEvaluation()",
217 xReduced = (x-fMean)/fDiff ;
218 xReduced2 = 2.0*xReduced ;
219 for (
G4int i=fNumber-1;i>=1;i--)
222 evaluate = xReduced2*evaluate - evaluate2 + fChebyshevCof[i] ;
225 return xReduced*evaluate - evaluate2 + 0.5*fChebyshevCof[0] ;
237 derCof[fNumber-1] = 0.0 ;
238 derCof[fNumber-2] = 2*(fNumber-1)*fChebyshevCof[fNumber-1] ;
239 for(
G4int i=fNumber-3;i>=0;i--)
241 derCof[i] = derCof[i+2] + 2*(i+1)*fChebyshevCof[i+1] ;
243 for(
G4int j=0;j<fNumber;j++)
261 G4double cof = 0.5*fDiff, sum = 0.0, factor = 1.0 ;
262 for(
G4int i=1;i<fNumber-1;i++)
264 integralCof[i] = cof*(fChebyshevCof[i-1] - fChebyshevCof[i+1])/i ;
265 sum += factor*integralCof[i] ;
268 integralCof[fNumber-1] = cof*fChebyshevCof[fNumber-2]/(fNumber-1) ;
269 sum += factor*integralCof[fNumber-1] ;
270 integralCof[0] = 2.0*sum ;
G4double GetChebyshevCof(G4int number) const
G4ChebyshevApproximation(function pFunction, G4int n, G4double a, G4double b)
G4double ChebyshevEvaluation(G4double x) const
void DerivativeChebyshevCof(G4double derCof[]) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static constexpr double pi
~G4ChebyshevApproximation()
void IntegralChebyshevCof(G4double integralCof[]) const