feat: backward derivative implemented, additional tests for deriv

This commit is contained in:
Fabian Joswig 2022-01-31 12:10:38 +00:00
parent 8165479846
commit a729def937
2 changed files with 25 additions and 1 deletions

View file

@ -467,7 +467,7 @@ class Corr:
----------
variant : str
decides which definition of the finite differences derivative is used.
Available choice: symmetric, forward, improved, default: symmetric
Available choice: symmetric, forward, backward, improved, default: symmetric
"""
if variant == "symmetric":
newcontent = []
@ -489,6 +489,16 @@ class Corr:
if(all([x is None for x in newcontent])):
raise Exception("Derivative is undefined at all timeslices")
return Corr(newcontent, padding=[0, 1])
elif variant == "backward":
newcontent = []
for t in range(1, self.T):
if (self.content[t - 1] is None) or (self.content[t] is None):
newcontent.append(None)
else:
newcontent.append(self.content[t] - self.content[t - 1])
if(all([x is None for x in newcontent])):
raise Exception("Derivative is undefined at all timeslices")
return Corr(newcontent, padding=[1, 0])
elif variant == "improved":
newcontent = []
for t in range(2, self.T - 2):

View file

@ -72,6 +72,20 @@ def test_modify_correlator():
func(corr, variant=variant)
def test_deriv():
corr_content = []
for t in range(24):
exponent = 1.2
corr_content.append(pe.pseudo_Obs(2 + t ** exponent, 0.2, 't'))
corr = pe.Corr(corr_content)
forward = corr.deriv(variant="forward")
backward = corr.deriv(variant="backward")
sym = corr.deriv(variant="symmetric")
assert np.all([o == 0 for o in (0.5 * (forward + backward) - sym)[1:-1]])
assert np.all([o == 0 for o in (corr.deriv('forward').deriv('backward') - corr.second_deriv())[1:-1]])
assert np.all([o == 0 for o in (corr.deriv('backward').deriv('forward') - corr.second_deriv())[1:-1]])
def test_m_eff():