我正在尝试从我一直在运行的模拟代码中拟合一些数据,以找出幂律依赖性。当我绘制线性拟合时,数据拟合得不是很好。
这是我用来拟合数据的python脚本:
#!/usr/bin/env python
from scipy import optimize
import numpy
xdata=[ 0.00010851, 0.00021701, 0.00043403, 0.00086806, 0.00173611, 0.00347222]
ydata=[ 29.56241016, 29.82245508, 25.33930469, 19.97075977, 12.61276074, 7.12695312]
fitfunc = lambda p, x: p[0] + p[1] * x ** (p[2])
errfunc = lambda p, x, y: (y - fitfunc(p, x))
out,success = optimize.leastsq(errfunc, [1,-1,-0.5],args=(xdata, ydata),maxfev=3000)
print "%g + %g*x^%g"%(out[0],out[1],out[2])
我得到的输出是:-71205.3 + 71174.5*x^-9.79038e-05
虽然在图上拟合看起来与最小二乘拟合所期望的一样好,但输出的形式让我感到困扰。我希望常数会接近你期望的零(大约 30)。我期待找到比 10^-5 更大的功率依赖性。
我尝试重新调整我的数据并使用参数来优化.leastsq,但没有运气。我想要完成的事情是可能的,还是我的数据不允许这样做?计算成本很高,因此获得更多数据点并非易事。
谢谢!