def estimate_std_dev(indep_variable, dep_variable):
"""
Parameters
----------
indep_variable : ndarray, list(float)
Independent variable (e.g., temperature, pressure)
dep_variable : ndarray, list(float)
Dependent variable (e.g., ignition delay)
Returns
-------
standard_dev : float
Standard deviation of difference between data and best-fit line
"""
assert len(indep_variable) == len(dep_variable), \
'independent and dependent variables not the same length'
# ensure data sorted based on independent variable to avoid some problems
sorted_vars = sorted(zip(indep_variable, dep_variable))
indep_variable = [pt[0] for pt in sorted_vars]
dep_variable = [pt[1] for pt in sorted_vars]
# spline fit of the data
if len(indep_variable) == 1 or len(indep_variable) == 2:
# Fit of data will be perfect
return min_deviation
elif len(indep_variable) == 3:
spline = UnivariateSpline(indep_variable, dep_variable, k=2)
else:
spline = UnivariateSpline(indep_variable, dep_variable)
standard_dev = numpy.std(dep_variable - spline(indep_variable))
if standard_dev < min_deviation:
print('Standard deviation of {:.2f} too low, '
'using {:.2f}'.format(standard_dev, min_deviation))
standard_dev = min_deviation
return standard_dev
评论列表
文章目录