mirror of
https://github.com/vale981/stocproc
synced 2025-03-04 17:21:42 -05:00
minor changes
This commit is contained in:
parent
44516e9e3e
commit
7264fc29d7
5 changed files with 28 additions and 7 deletions
|
@ -22,6 +22,11 @@ install:
|
||||||
- pip install cython
|
- pip install cython
|
||||||
- pip install numpy scipy
|
- pip install numpy scipy
|
||||||
- pip freeze
|
- pip freeze
|
||||||
|
- git clone https://github.com/cimatosa/fcSpline.git fcs_pack
|
||||||
|
- cd fcs_pack
|
||||||
|
- python setup.py build_ext --inplace
|
||||||
|
- cd ..
|
||||||
|
- ln -s fcs_pack/fcSpline
|
||||||
- python setup.py build_ext --inplace
|
- python setup.py build_ext --inplace
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -178,12 +178,18 @@ def _f_opt(x, integrand, a, b, N, t_max, ft_ref, diff_method, _f_opt_cache, b_on
|
||||||
else:
|
else:
|
||||||
a_ = find_integral_boundary(integrand, tol=tol, ref_val=a, max_val=1e6, x0=-1)
|
a_ = find_integral_boundary(integrand, tol=tol, ref_val=a, max_val=1e6, x0=-1)
|
||||||
b_ = find_integral_boundary(integrand, tol=tol, ref_val=b, max_val=1e6, x0=1)
|
b_ = find_integral_boundary(integrand, tol=tol, ref_val=b, max_val=1e6, x0=1)
|
||||||
except RuntimeError:
|
except Exception as e:
|
||||||
|
log.debug("Exception {} ({}) in _f_opt".format(type(e), e))
|
||||||
# in case 'find_integral_boundary' failes
|
# in case 'find_integral_boundary' failes
|
||||||
d = 300
|
d = 300
|
||||||
_f_opt_cache[key] = d, None, None
|
_f_opt_cache[key] = d, None, None
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
if a_ == b_:
|
||||||
|
d = 300
|
||||||
|
_f_opt_cache[key] = d, None, None
|
||||||
|
return d
|
||||||
|
|
||||||
|
|
||||||
tau, ft_tau = fourier_integral_midpoint(integrand, a_, b_, N)
|
tau, ft_tau = fourier_integral_midpoint(integrand, a_, b_, N)
|
||||||
idx = np.where(tau <= t_max)
|
idx = np.where(tau <= t_max)
|
||||||
|
|
|
@ -471,7 +471,7 @@ def auto_ng(corr, t_max, ngfac=2, meth=get_mid_point_weights_times, tol=1e-3, di
|
||||||
if not is_equi:
|
if not is_equi:
|
||||||
sqrt_lambda_ui_spl = tools.ComplexInterpolatedUnivariateSpline(tfine, sqrt_lambda_ui_fine, noWarning=True)
|
sqrt_lambda_ui_spl = tools.ComplexInterpolatedUnivariateSpline(tfine, sqrt_lambda_ui_fine, noWarning=True)
|
||||||
else:
|
else:
|
||||||
sqrt_lambda_ui_spl = fcSpline.FCS(x_low=0, x_high=t_max, y=sqrt_lambda_ui_fine)
|
sqrt_lambda_ui_spl = fcSpline.FCS(x_low=0, x_high=t_max, y=sqrt_lambda_ui_fine, ord_bound_apprx=2)
|
||||||
time_spline += (time.time() - t0)
|
time_spline += (time.time() - t0)
|
||||||
|
|
||||||
# calculate the max deviation
|
# calculate the max deviation
|
||||||
|
|
|
@ -86,6 +86,7 @@ class _absStocProc(abc.ABC):
|
||||||
np.random.seed(seed)
|
np.random.seed(seed)
|
||||||
self._one_over_sqrt_2 = 1/np.sqrt(2)
|
self._one_over_sqrt_2 = 1/np.sqrt(2)
|
||||||
self._proc_cnt = 0
|
self._proc_cnt = 0
|
||||||
|
self.sqrt_scale = 1.
|
||||||
log.debug("init StocProc with t_max {} and {} grid points".format(t_max, num_grid_points))
|
log.debug("init StocProc with t_max {} and {} grid points".format(t_max, num_grid_points))
|
||||||
|
|
||||||
def __call__(self, t=None):
|
def __call__(self, t=None):
|
||||||
|
@ -117,6 +118,10 @@ class _absStocProc(abc.ABC):
|
||||||
:return: the stochastic process, array of complex numbers
|
:return: the stochastic process, array of complex numbers
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _calc_scaled_z(self, y):
|
||||||
|
r"""scaled the discrete process z with sqrt(scale), such that <z_i z^ast_j> = scale bcf(i,j)"""
|
||||||
|
return self.sqrt_scale * self.calc_z(y)
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def get_num_y(self):
|
def get_num_y(self):
|
||||||
|
@ -154,8 +159,11 @@ class _absStocProc(abc.ABC):
|
||||||
if y is None:
|
if y is None:
|
||||||
#random complex normal samples
|
#random complex normal samples
|
||||||
y = np.random.normal(scale=self._one_over_sqrt_2, size = 2*self.get_num_y()).view(np.complex)
|
y = np.random.normal(scale=self._one_over_sqrt_2, size = 2*self.get_num_y()).view(np.complex)
|
||||||
self._z = self.calc_z(y)
|
self._z = self._calc_scaled_z(y)
|
||||||
log.debug("proc_cnt:{} new process generated [{:.2e}s]".format(self._proc_cnt, time.time() - t0))
|
log.debug("proc_cnt:{} new process generated [{:.2e}s]".format(self._proc_cnt, time.time() - t0))
|
||||||
|
|
||||||
|
def set_scale(self, scale):
|
||||||
|
self.sqrt_scale = np.sqrt(scale)
|
||||||
|
|
||||||
|
|
||||||
class StocProc_KLE(_absStocProc):
|
class StocProc_KLE(_absStocProc):
|
||||||
|
@ -221,7 +229,8 @@ class StocProc_KLE(_absStocProc):
|
||||||
Details on the error estimation and further clarification of the parameters ng_fac, meth,
|
Details on the error estimation and further clarification of the parameters ng_fac, meth,
|
||||||
diff_method, dm_random_samples can be found at :py:func:`stocproc.method_kle.auto_ng`.
|
diff_method, dm_random_samples can be found at :py:func:`stocproc.method_kle.auto_ng`.
|
||||||
"""
|
"""
|
||||||
|
self.key = r_tau, t_max, tol
|
||||||
|
|
||||||
sqrt_lambda_ui_fine, t = method_kle.auto_ng(corr=r_tau,
|
sqrt_lambda_ui_fine, t = method_kle.auto_ng(corr=r_tau,
|
||||||
t_max=t_max,
|
t_max=t_max,
|
||||||
ngfac=ng_fac,
|
ngfac=ng_fac,
|
||||||
|
@ -236,7 +245,7 @@ class StocProc_KLE(_absStocProc):
|
||||||
|
|
||||||
state = sqrt_lambda_ui_fine, t, seed
|
state = sqrt_lambda_ui_fine, t, seed
|
||||||
self.__setstate__(state)
|
self.__setstate__(state)
|
||||||
self.key = r_tau, t_max, tol
|
|
||||||
|
|
||||||
def get_key(self):
|
def get_key(self):
|
||||||
"""Returns the tuple (r_tau, t_max, tol) which should suffice to identify the process in order to load/dump
|
"""Returns the tuple (r_tau, t_max, tol) which should suffice to identify the process in order to load/dump
|
||||||
|
@ -336,6 +345,8 @@ class StocProc_FFT(_absStocProc):
|
||||||
"""
|
"""
|
||||||
def __init__(self, spectral_density, t_max, bcf_ref, intgr_tol=1e-2, intpl_tol=1e-2,
|
def __init__(self, spectral_density, t_max, bcf_ref, intgr_tol=1e-2, intpl_tol=1e-2,
|
||||||
seed=None, negative_frequencies=False):
|
seed=None, negative_frequencies=False):
|
||||||
|
self.key = bcf_ref, t_max, intgr_tol, intpl_tol
|
||||||
|
|
||||||
if not negative_frequencies:
|
if not negative_frequencies:
|
||||||
log.info("non neg freq only")
|
log.info("non neg freq only")
|
||||||
# assume the spectral_density is 0 for w<0
|
# assume the spectral_density is 0 for w<0
|
||||||
|
@ -393,7 +404,6 @@ class StocProc_FFT(_absStocProc):
|
||||||
self.yl = spectral_density(omega + a + dx/2) * dx / np.pi
|
self.yl = spectral_density(omega + a + dx/2) * dx / np.pi
|
||||||
self.yl = np.sqrt(self.yl)
|
self.yl = np.sqrt(self.yl)
|
||||||
self.omega_min_correction = np.exp(-1j*(a+dx/2)*self.t) #self.t is from the parent class
|
self.omega_min_correction = np.exp(-1j*(a+dx/2)*self.t) #self.t is from the parent class
|
||||||
self.key = bcf_ref, t_max, intgr_tol, intpl_tol
|
|
||||||
|
|
||||||
def __getstate__(self):
|
def __getstate__(self):
|
||||||
return self.yl, self.num_grid_points, self.omega_min_correction, self.t_max, self._seed
|
return self.yl, self.num_grid_points, self.omega_min_correction, self.t_max, self._seed
|
||||||
|
|
|
@ -239,7 +239,7 @@ def test_many(plot=False):
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import logging
|
import logging
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.INFO)
|
||||||
# test_stochastic_process_KLE_correlation_function(plot=False)
|
# test_stochastic_process_KLE_correlation_function(plot=False)
|
||||||
# test_stochastic_process_FFT_correlation_function(plot=False)
|
# test_stochastic_process_FFT_correlation_function(plot=False)
|
||||||
# test_stocproc_dump_load()
|
# test_stocproc_dump_load()
|
||||||
|
|
Loading…
Add table
Reference in a new issue