就规模问题而言,我同意Olaf的看法。最佳参数相差许多数量级。但是,缩放生成玩具数据所用的参数似乎不能解决实际应用程序的问题。^{}使用^{},它在数值上近似于雅可比矩阵,其中数值问题是由于尺度的差异而产生的(尝试在curve_fit中使用full_output关键字)。在
根据我的经验,最好使用^{},它不依赖于近似导数,而只使用函数值。你现在必须写你自己的最小二乘函数,它将被优化。在
起始值仍然很重要。在您的例子中,您可以通过取a的最大振幅和b和c对应的x值来进行充分的猜测。在
在代码中,如下所示:from scipy.optimize import curve_fit,fmin
import numpy
import pylab
# Create a gaussian function
def gaussian(x, a, b, c):
val = a * numpy.exp(-(x - b)**2 / (2*c**2))
return val
# Generate fake data.
zMinEntry = 80.0*1E-06
zMaxEntry = 180.0*1E-06
zStepEntry = 0.2*1E-06
x = numpy.arange(zMinEntry,
zMaxEntry,
zStepEntry,
dtype = numpy.float64)
n = len(x)
meanY = zMinEntry + (zMaxEntry - zMinEntry)/2
sigmaY = 10.0