Bass значение p q m в excel и scipy

Друзья, всем привет. Изучаю модель распространения инноваций по Бассу на примере ветрогенерации. В excel можно получить значения p, q, m так, что модель по Бассу идеально накладывается на реальные данные, но при этом, пытаясь реализовать это на python через scipy, такие значения p,q,m не получаются. Вот ссылка на файл, в нем я значения p,q,m получаю через, - данные, - поиск решения(предварительно в параметрах включив их в надстройках), оптимизировать целевую функцию - $F$6, изменяя ячейки переменных $A$5:$C$5, ок. но пытаясь реализовать это через scipy они не получаются

from scipy.optimize import curve_fit

data = pd.DataFrame({'year': [1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020],
                     'generate': [8.26192344363636, 9.20460066059596, 12.0178164697778, 15.921260267805, 21.2161740066094, 31.420434564131, 38.3904519471421, 52.3307819867071, 62.9113953016839, 85.1161924282732, 104.083879757882, 132.859216030029, 170.682620580279, 220.600045153997, 276.020526299077, 346.465021938078, 440.385091980306, 530.55442135112, 635.49205101167, 705.805860788812, 831.42968828187, 962.227395409379, 1140.31094904253, 1269.52053571083, 1418.17004626655, 1591.2135122193]})
data['cum_sum'] = data['generate'].cumsum()
print(data)

# Оптимизируя идеальные значения p, q и m, получаем
def c_t(x, p, q, m):
    return (p+(q/m)*(x))*(m-x)
    # return (p*m+(q-p)*(x))-(q/m)*(x**2)
popt, pcov = curve_fit(c_t, data.cum_sum[0:11], data.generate[1:12], maxfev = 5000)
print(popt)
print(round(popt[0],5))
print(round(popt[1],5))
print(round(popt[2],5))```

Ответы (0 шт):