我的问题是讨论How to fit the 2D scatter data with a line with C++的延伸。现在我想进一步扩展我的问题:在估计适合 2D 散射数据的线时,如果我们可以不同地处理每个 2D 散射数据会更好。也就是说,如果散点远离直线,我们可以给点低权重,反之亦然。因此,问题就变成了:给定一个二维散点数组以及它们的权重因子,我们如何估计通过它们的线性线?这种方法的一个很好的实现可以在这篇文章中找到(加权最小回归)。但是,那篇文章中的算法的实现太复杂了,因为它涉及到矩阵计算。因此,我试图找到一种无需矩阵计算的方法。该算法是简单线性回归的扩展,为了说明该算法,我编写了以下 MATLAB 代码:
function line = weighted_least_squre_for_line(x,y,weighting);
part1 = sum(weighting.*x.*y)*sum(weighting(:));
part2 = sum((weighting.*x))*sum((weighting.*y));
part3 = sum( x.^2.*weighting)*sum(weighting(:));
part4 = sum(weighting.*x).^2;
beta = (part1-part2)/(part3-part4);
alpha = (sum(weighting.*y)-beta*sum(weighting.*x))/sum(weighting);
a = beta;
c = alpha;
b = -1;
line = [a b c];
在上述代码中,x,y,weighting
分别表示x坐标、y坐标和权重因子。我用几个例子测试了算法,但仍然不确定它是否正确,因为这种方法使用Polyfit得到了不同的结果,它依赖于矩阵计算。我现在在这里发布实现并征求您的意见。你认为这是一个正确的实施吗?谢谢!