Ich erhalte die folgende Fehlermeldung nach dem Versuch, die eine numerische Integration auf einem infinte Intervall [0, inf) unter Verwendung von GSL in C.gsl Fehler im inifinit Integrationsintervall. Schlechtes integriertes Verhalten gefunden. Wie man es repariert?
gsl: qags.c:553: ERROR: bad integrand behavior found in the integration interval
Default GSL error handler invoked.
Command terminated by signal 6
Hier wird die Funktion Ich Integration $
zu tundouble dI2dmu(double x, void * parametros){
double *p,Ep,mu,M,T;
p=(double *) parametros;
M=p[0];
T=p[1];
mu=p[2];
Ep=sqrt(x*x+M*M);
double fplus= -((exp((Ep - mu)/T)/(pow(1 + exp((Ep - mu)/T),2)*T) - exp((Ep + \
mu)/T)/(pow(1 + exp((Ep + mu)/T),2)*T))*pow(x,2))/(2.*Ep*pow(PI,2));
return fplus;
}
Und der Code für das Integrationsverfahren
params[0]=0.007683; //M
params[1]=0.284000;// T
params[2]=0.1; //mu
gsl_function dI2mu_u;
dI2mu_u.function = &dI2dmu;
dI2mu_u.params = ¶ms;
gsl_integration_qagiu (&dI2mu_u, 0, 0, 1e-7, 100000,
w, &resultTest2, &error1Test2);
die fucntion den folgenden Aspekt hat:
Welche, für meine Augen, hat ein sehr gutes Verhalten. Anstatt also eine unendliche Integration durchgeführt wird, fahre ich die Integration bis zu einer Obergrenze, die ich für rezonable, wie in:
gsl_function G;
G.function = &dI2dmu;
G.params = ¶ms;
gsl_integration_qags (&G, 0, 1e2*A, 0, 1e-7, 100000,
w, &result1, &error1);
ein Ergebnis zu erzielen, die für unendliche Integration mit dem Ergebnis von Mathematica stimmt
result definite up to 10*A = 0.005065263943958745
result up to infinity = nan
Mathematica result up to infinity = 0.005065260000000000
Aber das GSL unendliche integrale keps ist "Nan". Irgendwelche Ideen? Ich danke im Voraus für die Hilfe.
Sie können "Ep = sqrt (x * x + M * M)" mit "Ep = hypot (x, M)" ersetzen. – EOF