我正在使用scipy.optimize.curve_fit
将曲线拟合到我拥有的一些数据。曲线,在很大程度上,似乎非常适合。出于某种原因,当我打印时pcov=inf。
我真正需要的是计算与我拟合的参数相关联的误差,即使它确实给了我协方差矩阵,我也不确定该如何精确地计算。
适合的模型是:
def intensity(x,R_out,R_in,K_in,K_out,a,b,c):
K_in,K_out = abs(0.0),abs(K_out)
if x<=R_in:
return 2*R_out*(K_out*np.sqrt(1-x**2/R_out**2)-
(K_out-0.0)*np.sqrt(R_in**2/R_out**2-x**2/R_out**2)) + c
elif x>=R_in and x<=R_out:
return K_out*2*R_out*np.sqrt(1-x**2/R_out**2) + c
elif x>R_out:
return c
intensity_vec = np.vectorize(intensity)
def intensity_vec_self(x,R_out,R_in,K_in,K_out,a,b,c):
y = np.zeros(x.shape)
for i in range(len(y)):
y[i]=intensity_vec(x[i],R_out,R_in,K_in,K_out,a,b,c)
return y
有400个数据点,如果你觉得有用的话,我可以放在这里。
总而言之,我无法让curve_fit
打印出我的pcov
,需要帮助来弄清楚为什么以及是否可以让它这么做。
另外,如果这是一个快速的解释,我想知道如何使用pcov
数组来获得与我的fit相关的错误。
谢谢
参数方差是方差协方差矩阵的对角元,标准差是其平方根。
np.sqrt(np.diag(pcov))
关于获取
inf
,请参阅并比较以下两个示例:以及:
在这个极端的例子中,
d
对函数func
没有影响,因此它将与+inf
的方差相关,换句话说,它可以是任何值。从func
中删除d
将得到有意义的结果。实际上,如果参数的规模非常不同,请说:
由于浮点溢出/下溢,您还将得到
inf
。在你的例子中,我认为你从未使用过
a
和b
。这就像这里的第一个例子。相关问题 更多 >
编程相关推荐