我試圖做的C.gsl無限長積分區間中的錯誤。發現不好的被積函數行爲。如何解決它?
gsl: qags.c:553: ERROR: bad integrand behavior found in the integration interval
Default GSL error handler invoked.
Command terminated by signal 6
這裏使用GSL一個infinte區間[0,INF)的數值積分後,得到以下錯誤消息,我的集成功能 $
double 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;
}
而對於整合過程
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);
的溫控功能具有以下方面的代碼:
對我而言,它的行爲非常好。所以,與其進行無限融合,我進行集成高達,我認爲rezonable,就像一個上限:
gsl_function G;
G.function = &dI2dmu;
G.params = ¶ms;
gsl_integration_qags (&G, 0, 1e2*A, 0, 1e-7, 100000,
w, &result1, &error1);
獲取與數學的無限融合的結果一致的結果
result definite up to 10*A = 0.005065263943958745
result up to infinity = nan
Mathematica result up to infinity = 0.005065260000000000
但GSL無限積分keps爲「nan」。有任何想法嗎?我預先感謝您的幫助。
你可能想用'Ep = hypot(x,M)'來代替'Ep = sqrt(x * x + M * M);'。 – EOF