输出错误为: 最小化异常: 没有合理的置信区间就不能确定不确定性
为什么我会出错?我如何计算不确定性估计并解决这个问题??在
for dosya1 in glob.glob("mean*"):
data1=np.genfromtxt(dosya1, skip_header=0, skip_footer=0, names=["wavelength","mean"])
x=data1["wavelength"]
mod=VoigtModel()
pars = mod.guess(y, x=x)
pars['gamma'].set(value=0.7, vary=True, expr="")
out=mod.fit(y,pars, x=x)
pars=lmfit.Parameters()
pars.add_many(('amp', out.params["amplitude"].value), ('sig', out.params["sigma"].value), ("gam",out.params["gamma"].value),("cent",out.params["center"].value))
def residual(p):
amp=p["amp"].value
sig=p["sig"].value
gam=p["gam"].value
cent=p["cent"].value
return ((wofz((x-cent + wofz(gam).imag)/(sig*(sqrt(2)))).real) / (sig*(sqrt(2))))- y
mini = lmfit.Minimizer(residual, pars)
result=mini.minimize()
ci = lmfit.conf_interval(mini, result)
lmfit.printfuncs.report_ci(ci)
如果
lmfit.minimize()
(实际上,leastsq()
)无法通过反转曲率矩阵来估计不确定性,则会得到此错误消息。它使用这些值(通常是非常好的估计值,顺便说一句)作为显式探索参数空间的尺度。有几个可能的原因导致leastsq()
无法估计不确定性。常见的原因是没有找到一个或多个变量来改变拟合,或者残差包含nan。在很难预测何时会发生这种情况。在调用
conf_interval()
之前,您应该考虑到这种可能性和/或检查初始拟合是否成功并能够对不确定性进行初始估计(检查result.errorbars
)。在相关问题 更多 >
编程相关推荐