我的问题是讨论How to fit the 2D scatter data with a line with C++的延伸。现在我想进一步扩展我的问题:在估计符合2D散射数据的线时,如果我们可以以不同的方式处理每个2D散射数据会更好。也就是说,如果散点距离线很远,我们可以给这个点低权重,反之亦然。因此,问题就变成了:给定一系列二维散射点以及它们的权重因子,我们如何估计通过它们的线性线?这篇文章(weighted least regression)可以找到这个方法的一个很好的实现。然而,该文中算法的实现过于复杂,因为它涉及矩阵计算。因此,我试图找到一种没有矩阵计算的方法。该算法是simple linear regression的延伸,并且为了说明的算法,我写了下面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不同的结果,其依赖于矩阵计算。我现在在此发布实施并征求您的建议。你认为这是一个正确的实施?谢谢!
感谢您提供建议。 – feelfree 2012-07-20 07:29:45