我使用numpy.polyfit将二阶多项式拟合为一组数据
fit1, fit_err1, _, _, _ = np.polyfit(xint[:index_max],
yint[:index_max],
2,
full=True)
对于我的数据的一些示例,虽然拟合成功,但变量fit_err1
为空,即fit1
不为空!
有人知道在这种情况下空残余是什么意思吗?谢谢!
编辑: 一个示例数据集:
x = [-488., -478., -473.]
y = [ 0.02080881, 0.03233648, 0.03584448]
fit1, fit_err1, _, _, _ = np.polyfit(x, y, 2, full=True)
结果:
fit1 = [ -3.00778818e-05 -2.79024663e-02 -6.43272769e+00]
fit_err1 = []
我知道将二阶多项式拟合到三个点的集合并不是很有用,但是我仍然期望函数要么发出警告,要么(因为它实际上确定了拟合)返回实际的残差,或者两者(比如“这里是残差,但你的条件很差!”)。
答案 0 :(得分:5)
正如@Jaime所指出的,如果你有三个点,那么二阶多项式将完全适合它。而且你的观点是错误应该比空数组0
更有意义,但这是np.linalg.lstsq
,which is where np.polyfit
is wrapped around的当前行为。
我们可以测试这种行为,做一个y = a*x**0 + b*x**1 + c*x**2
方程的最小二乘拟合,我们知道答案应该是a=0, b=0, c=1
:
np.linalg.lstsq([[1, 1 ,1], [1, 2, 4], [1, 3, 9]], [1, 4, 9])
#(array([ -3.43396424e-15, 3.88578059e-15, 1.00000000e+00]),
# array([], dtype=float64),
# 3,
# array([ 10.64956309, 1.2507034 , 0.15015641]))
我们可以看到第二个输出是一个空数组。并this is intended to work like this。