【发布时间】:2019-01-23 22:11:33
【问题描述】:
我正在尝试进行线性拟合,但有两个问题。首先,它告诉我 “无法估计参数的协方差”,即使我对参数的猜测应该是正确的。我还收到以下错误:“'numpy.float64' 对象不能解释为整数”。我认为最后一个错误意味着我在需要整数的地方使用浮点数,但我不明白错误在哪里。感谢您提供的任何帮助!
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
E1=[13.95,17.74]
CH=[880.89,1122.28]
errCH=[0.10,0.21]
errE1=[0.0,0.0]
def cal_func(x,c,m):
return m*x+c
from scipy.optimize import curve_fit
popt, pcov=curve_fit(cal_func,E1,CH,p0=[-10,60])
plt.plot(E1,cal_func(E1,*popt))
plt.errorbar(E1,CH,errCH,errE1,linestyle="none")
plt.xlabel("Energy [KeV]")
plt.ylabel("Bin")
【问题讨论】:
-
只有两个点,无法确定协方差。但是,只有两个点,甚至不需要进行拟合,因为您可以简单地计算参数(两个点,两个参数 = 自洽方程组)。
-
我怀疑问题是由于某些绘图参数乱序造成的。
-
关于错误。您正在尝试将列表与浮点数相乘。这是不可能的。但是,您可以将 numpy 数组与浮点数相乘,因此解决方案是
plt.plot(E1,cal_func(np.array(E1),*popt))。 -
@ImportanceOfBeingErnest 非常感谢!
标签: python matplotlib scipy curve-fitting