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之类的更大的库中支持这种操作?

最佳答案

没有循环,这是通过将两侧的协方差矩阵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与您的函数返回的内容相同。

10-04 14:02