def fit()

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)