adding tighter error tolerances and adding checks for imrpl
This commit is contained in:
15
pynam/noise/im_ref.py
Normal file
15
pynam/noise/im_ref.py
Normal 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
|
||||
@@ -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])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user