adding tighter error tolerances and adding checks for imrpl

This commit is contained in:
2020-07-14 10:59:33 -05:00
parent 622af16142
commit a7c33fb5df
4 changed files with 56 additions and 4 deletions

15
pynam/noise/im_ref.py Normal file
View File

@@ -0,0 +1,15 @@
from typing import Callable
import numpy as np
import pynam.noise.zeta
def get_im_ref_p(eps: Callable[[float], complex]) -> Callable[[float], float]:
zeta_p = pynam.noise.zeta.get_zeta_p_function(eps)
def im_ref_p(u: float) -> float:
zeta_p_val = zeta_p(u)
return np.imag((np.pi * 1j * u - zeta_p_val) / (np.pi * 1j * u + zeta_p_val))
return im_ref_p

View File

@@ -62,10 +62,10 @@ def get_zeta_p_function(eps: Callable[[float], complex]):
def zeta_p(u: float) -> complex:
zeta_p_integrand = get_zeta_p_integrand(eps)
i1_small = pynam.util.complex_quad(lambda x: integrand1_small_x(x, u), 0, SMALL_X_BOUNDARY)
i1_big = pynam.util.complex_quad(lambda x: integrand1_big_x(x, u), SMALL_X_BOUNDARY, np.inf)
i2_small = pynam.util.complex_quad(lambda x: integrand2_small_x(x, u), 0, SMALL_X_BOUNDARY)
i2_big = pynam.util.complex_quad(lambda x: integrand2_big_x(x, u), SMALL_X_BOUNDARY, np.inf)
i1_small = pynam.util.complex_quad(lambda x: integrand1_small_x(x, u), 0, SMALL_X_BOUNDARY, epsabs=1e-12)
i1_big = pynam.util.complex_quad(lambda x: integrand1_big_x(x, u), SMALL_X_BOUNDARY, np.inf, epsabs=1e-12)
i2_small = pynam.util.complex_quad(lambda x: integrand2_small_x(x, u), 0, SMALL_X_BOUNDARY, epsabs=1e-12)
i2_big = pynam.util.complex_quad(lambda x: integrand2_big_x(x, u), SMALL_X_BOUNDARY, np.inf, epsabs=1e-12)
integral = sum(term[0] for term in [i1_small, i2_small, i1_big, i2_big])