正如@ebarr 在 cmets 中已经提到的,您可以使用 np.polyfit 通过关键字参数 full=True 返回残差。
例子:
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z, residuals, rank, singular_values, rcond = np.polyfit(x, y, 3, full=True)
residuals 然后是最小二乘之和。
或者,您可以使用关键字参数cov=True 来获取协方差矩阵。
例子:
x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
z, cov = np.polyfit(x, y, 3, cov=True)
然后,cov 的对角线元素是 z 中系数的方差,即np.sqrt(np.diag(cov)) 为您提供系数的标准差。您可以使用标准偏差来估计绝对误差超过某个值的概率,例如通过在uncertainty propagation calculation 中插入标准差。如果你使用例如3*不确定性传播中的标准偏差,您计算的误差在 99.7% 的情况下不会超过。
最后一个提示:您必须选择是选择full=True 还是cov=True。 cov=True 仅在 full=False(默认)时有效,反之亦然。