You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
from __future__ import print_function |
|
from cnmodel.util import ExpFitting |
|
import numpy as np |
|
|
|
|
|
def test_fit1(): |
|
fit = ExpFitting(nexp=1) |
|
x = np.linspace(0.0, 50, 500) |
|
p = [-50.0, 4.0, 5.0] |
|
y = p[0] + p[1] * np.exp(-x / p[2]) |
|
res = fit.fit(x, y, fit.fitpars) |
|
pr = [float(res[k].value) for k in res.keys()] |
|
print("\noriginal: ", p) |
|
print("fit res: ", pr) |
|
for i, v in enumerate(p): |
|
assert np.allclose(v, pr[i]) |
|
|
|
|
|
def test_fit2(): |
|
fit = ExpFitting(nexp=2) |
|
x = np.linspace(0.0, 50, 500) |
|
p = [ |
|
-50.0, |
|
4.0, |
|
5.0, |
|
1.0, |
|
4.5, |
|
] # last term is ratio of the two time constants (t2 = delta*t1) |
|
y = p[0] + p[1] * np.exp(-x / p[2]) + p[3] * np.exp(-x / (p[2] * p[4])) |
|
res = fit.fit(x, y, fit.fitpars) |
|
pr = [float(res[k].value) for k in res.keys()] |
|
print("\noriginal: ", p) |
|
print("fit res: ", pr) |
|
# we can only do this approximately for 2 exp fits |
|
for i, v in enumerate(p): # test each one individually |
|
assert np.allclose(pr[i] / v, 1.0, atol=1e-4, rtol=1e-2)
|
|
|