我在对一些数据进行幂律最佳拟合
xdat = [0.117, 0.241, 0.782, 0.734, 1.275, 1.192, 1.483, 0.131, 0.279, 0.453, 1.128, 0.928, 2.197]
ydat = [260.07, 85.82, 87.71, 124.57, 32.35, 80.5, 31.86, 55.36, 44.8, 27.28, 51.21, 53.77, 43.58]
和scipy.optimize的curve_fit函数
def powlaw(x,a,b):
return a*(x**b)
popt, pcov = curve_fit(powlaw, xdat, ydat)
提供了以下结果:
>>> popt
array([51.96762158, -0.4920125 ])
对应于y ~ 52 x-0.49。
同时,我的TI-84(Plus C银Edition)计算器的PwrReg
函数给出:
y=a*x^b
a=52.23979898
b=-.308726274
对应于y 〜 52 x 〜 0.31。
对于我的目的来说,轻微的系数差异是可以接受的,但指数差异绝对不是。有什么想法吗
1条答案
按热度按时间pdsfdshx1#
直接的“为什么”是因为TI正在执行对数误差拟合而不是线性误差拟合:
但是,由于您的数据在范围内变化不大(即使这是一个幂函数),因此没有明显的赢家。如果你有多个数量级,那将是一个不同的故事。