, хотя я отлично подошел для других наборов данных, по какой-то причине следующий код не работает для относительно простого набора точек. Я пробовал как экспоненциальную, так и убывающую экспоненты, а также начальные параметры и границы. Я считаю, что это разоблачает мое глубокое недопонимание; Я ценю любые советы.
snr = [1e10, 5, 1, .5, .1, .05]
tau = [1, 8, 10, 14, 35, 80]
fig1, ax1 = plt.subplots()
def fit(x, a, b, c): #c: asymptote
#return a * np.exp(b * x) + 1.
return np.power(x,a)*b + c
xlist = np.arange(0,len(snr),1)
p0 = [-1., 1., 1.]
params = curve_fit(fit, xlist, tau, p0)#, bounds=([-np.inf, 0., 0.], [0., np.inf, np.inf]))
a, b, c = params[0]
print(a,b,c)
ax1.plot(xlist, fit(xlist, a, b, c), c='b', label='Fit')
#ax1.plot(snr, tau, zorder=-1, c='k', alpha=.25)
ax1.scatter(snr, tau)
ax1.set_xscale('log')
#ax1.set_xlim(.02, 15)
plt.show()
Обновление 1: справочный рисунок, следующий за кодом Eri c M: Будет комментировать в сообщение ниже.
Исправление для обновления 1: xlist = np.arange(0.01,10000,1)/1000+0.01