in analysis/GreenSKU-Framework/src/derate_curve.py [0:0]
def fit(func, x_data, y_data, plot=False):
# popt: optimal values for the parameters
# pcov: covariance matrix
if isinstance(x_data, list):
x_data = np.array(x_data)
if isinstance(y_data, list):
y_data = np.array(y_data)
popt, pcov = opt.curve_fit(func, x_data, y_data)
if plot:
x_fit = np.linspace(x_data[0], x_data[-1], 100)
y_fit = func(x_fit, *popt)
plt.plot(x_data, y_data, 'o', label='data')
plt.plot(x_fit, y_fit, label='fit')
plt.legend()
plt.show()
# return func with optimal parameters
return lambda x: func(x, *popt)