Discontinuity In Results When Using Scipy.integrate.quad
Solution 1:
While I'm not exactly familiar with QUADPACK, adaptive integration generally works by increasing resolution until the answer no longer improves. Your function is so close to 0 for most of the interval (with F(10)==9.356e-116
) that the improvement is negligible for the initial grid points that quad chooses, and it decides that the integral must be close to 0. Basically, if your data hides in a very narrow subinterval of the range of integration, quad
eventually won't be able to find it.
For integration from 0
to inf
, the interval obviously cannot be subdivided into a finite number of intervals, so quad
will need some preprocessing before computing the integral. For example, a change of variables like y=1/(1+x)
would map the interval 0..inf
to 0..1
. Subdividing that interval will sample more points near zero from the original function, enabling quad
to find your data.
Solution 2:
try lowering the error tolerance
>>> quad(F, a, 1000, epsabs=1.49e-11)
(0.5199388058383727, 2.6133800952484582e-11)
I guess numerical integration is just sensitive to certain configuration. You can try to debug it by calling quad(..., full_output=1)
and analyzing the verbose output carefully. Sorry if the answer is not satisfactory though.
Post a Comment for "Discontinuity In Results When Using Scipy.integrate.quad"