increase precision in log-gaussian integration
This commit is contained in:
parent
cde794cb0d
commit
37a6d789bb
@ -105,8 +105,16 @@ def _integrate_susc_c(lowfunc, highfunc, omega, tau, sigma):
|
|||||||
c = (ctypes.c_double * 3)(o, t, sigma)
|
c = (ctypes.c_double * 3)(o, t, sigma)
|
||||||
user_data = ctypes.cast(ctypes.pointer(c), ctypes.c_void_p)
|
user_data = ctypes.cast(ctypes.pointer(c), ctypes.c_void_p)
|
||||||
|
|
||||||
area = quad(LowLevelCallable(highfunc, user_data), 0, np.infty, epsabs=1e-12, epsrel=1e-12)[0]
|
area = 0
|
||||||
area += quad(LowLevelCallable(lowfunc, user_data), -np.infty, 0, epsabs=1e-12, epsrel=1e-12)[0]
|
for (func, limits) in [(highfunc, (0, np.inf)), (lowfunc, (-np.infty, 0))]:
|
||||||
|
epsabs = 1e-12
|
||||||
|
while epsabs > 1e-25:
|
||||||
|
a = quad(LowLevelCallable(func, user_data), *limits, epsabs=epsabs, epsrel=1e-12, full_output=1)
|
||||||
|
if a[2]['last'] > 2 or a[0] < 1e-48:
|
||||||
|
break
|
||||||
|
epsabs /= 10.
|
||||||
|
|
||||||
|
area += a[0]
|
||||||
|
|
||||||
res.append(area)
|
res.append(area)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user