28 lines
760 B
Python
28 lines
760 B
Python
from mathutils import PolynomialFunction
|
|
|
|
def quadfit(xdata, ydata):
|
|
"""
|
|
Quadratic fit
|
|
"""
|
|
p = (a0, a1, a2) = fit_polynomial(ydata, xdata, 2)
|
|
f = PolynomialFunction(p)
|
|
if a1 != 0:
|
|
x_ext = -a1 / (2 * a0)
|
|
y_ext = f.value(x_ext)
|
|
else:
|
|
x_ext = None
|
|
y_ext = None
|
|
yhat = [f.value(val) for val in xdata]
|
|
ybar = sum(ydata)/len(ydata)
|
|
ssreg = sum([(val - ybar)**2 for val in yhat])
|
|
sstot = sum([(val - ybar)**2 for val in ydata])
|
|
R2 = ssreg / sstot
|
|
x1 = min(xdata)
|
|
x2 = max(xdata)
|
|
x_fit = frange(x1, x2, (x2-x1)/100, True)
|
|
y_fit = [f.value(val) for val in x_fit]
|
|
return (p, x_ext, y_ext, R2, x_fit, y_fit)
|
|
|
|
xx=(1.0,2.0,3.0,4.0)
|
|
yy=(1.1,3.9,8.5,15.8)
|
|
quadfit(xx, yy) |