从polyfit()
函数我有系数和它们的协方差矩阵。现在对于某些参数,我想要一个带有错误的多项式的值。显然polyval()
函数不接受协方差矩阵(在matlab中它)。根据定义,我可以编写自己的函数:
def sigma(x,pcov):
s=0
for i in range(len(pcov)):
for j in range(len(pcov[0])):
s+=x**(len(pcov)-i-1)*pcov[i][j]*x**(len(pcov[0])-j-1)
return sqrt(s)
由于多项式中的系数的逆序,我必须用索引做一些有趣的东西。但它似乎并不像pythonic。我错过了什么吗?或者也许支持这种操作是在像SciPy这样的更大的库中?
答案 0 :(得分:1)
没有循环,这是通过将两侧的协方差矩阵C乘以由x的相关幂构成的向量x_powers
来计算的:例如,[x**5, x**4, ..., x**0]
。为了完整性,包括polyfit的设置。
xdata = np.arange(10)
ydata = np.abs(xdata-2) # some data to fit
degree = 5
p, C = np.polyfit(xdata, ydata, deg=degree, cov=True)
x = 5.4 # some value of x to estimate error at
x_powers = x**np.arange(degree, -1, -1)
x_error = np.sqrt(x_powers.dot(C).dot(x_powers))
此处x_error
与函数返回的内容相同。