我试图用指数函数拟合我的数据
import numpy as np
def exponentional(k, alpha, k0, c):
return k0 * np.exp(k *-alpha) + c
我使用了scipy.optimize中的curve_fit
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
uniq_deg = [2,...,103,..,203,...,307,...,506]
normalized_deg_dist = [0.99,...,0.43,..0.12,..,0.04,..., 0.01]
popt, pcov = curve_fit(exponentional, uniq_deg, normalized_deg_dist,
p0 = [1,0.00001,1,1], maxfev = 6000)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.semilogy(uniq_deg, normalized_deg_dist, 'bo', label = 'Real data')
ax.semilogy(uniq_deg,[exponentional(d,*popt) for d in uniq_deg], 'r-', label = 'Fit')
ax.set_xlabel('Degree' )
ax.set_ylabel('1-CDF degree')
ax.legend(loc='best')
ax.set_title(f'Degree distribution in {city}')
plt.show()
导致:
看起来不太合适
我错在哪里
最后,我没有使用
curve_fit
。我使用了来自https://mathworld.wolfram.com/LeastSquaresFittingExponential.html的指数拟合的定义我还需要用幂律拟合其他数据,我也是这么做的
第一个图用于指数拟合,第二个图用于幂律拟合。 我认为结果令人信服
相关问题 更多 >
编程相关推荐