python拟合曲线并得出方程式,python拟合曲线误差分析
关于规模问题,我同意奥拉夫的意见。最佳参数相差几个数量级。但是,缩放用于生成玩具数据的参数似乎无法解决实际的应用问题。使用^{}^{}。在数值上近似于雅可比矩阵。数值问题是由尺度的差异引起的。 (请尝试在曲线拟合中使用全输出关键字。在
根据我的经验,最好用^{}。不依赖于近似导数,只使用函数的值。你现在必须写下你自己最mldjc乘方函数。那个会被优化。在
初始值依然很重要。在你的例子中,通过取a的最大振幅和与b和c对应的x的值可以充分推测。在
在代码中,您将看到以下内容:来自scipy.optimizeimportcurve _ fit,fmin
导入编号
导入实验室
#创建高斯函数
定义高斯(x,a,b,c):
val=a * numpy。exp(-(x-b)* 2/)2 * c * * 2))
返回值
#生成假货数据。
zMinEntry=80.0*1E-06
zMaxEntry=180.0*1E-06
zStepEntry=0.2*1E-06
x=numpy.arange(zminentry,
四川峨眉山随行酒店条目,
zStepEntry,
dtype=numpy.float64)
n=len(x)
meany=zmin条目(zmax条目-zmin条目)/2
sigmaY=10.0E-06
a=1.0/(sigmay * numpy)。sqrt)2 * numpy。pi))
y=高斯(x,a,meanY,sigmaY)a* 0.1 * numpy。随机的。normal(0,1,size=len(x ) x)))))
打印一,卑鄙,西格玛伊
# estimatestartingvaluesfromthedata
a=y.max()
b=x[numpy.argmax(a ) ]
c=b
# definealastsquaresfunctiontoooptimize
EFminfunc(Params):
returnsum((y-Gaussian ) x、params[0]、params[1]、params[2] ) * (2))))))
#适合
popt=fmin(minfunc,[a,b,c])
#打印结果
print(scale=%.3f ) % ) popt[0])
print(offset=%.3f ) % ) popt[1])
print(sigma=%.3f ) % ) popt[2])
pylab.plot(x,y, ro )。
pylab.plot(x,gaussian(x ) x,popt[0],popt[1],popt[2],lw=2))))))
pylab.xlim(x.min)、x.max))
pylab.grid(true))。
pylab.show(
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。