我正在做一个最适合某些数据集的直线。我正在使用正常形式的直线。假设我有一组点(x_1,y_1),(x_2,y_2),...,(x_n,y_n)。假设直线的正规形式是x * cos(theta)+ y * sin(theta)= r。
所以在我的情况下,我有以下方程组:
x_1 cos(theta)+ y_1 sin(theta)= r
x_2 cos(theta)+ y_2 sin(theta)= r
...
x_n cos(theta)+ y_n sin(theta)= r
我想以最小二乘方式解决theta和r的等式。试图以Ax = b的形式写出方程。但在这种情况下,我无法将向量x中的未知数分开以求解方程。有什么建议吗?
答案 0 :(得分:1)
正如您可以很容易地看到,有更多的方程式而不是未知数,因此通常无法找到精确的解。对于最小二乘解,首先要写出最小二乘法,这里是点与线的平方距离之和。如果你想要完整的理论,最好在http://math.stackexchenge.com询问。但是,我会提供一个如何继续的方法:
您计算x和y值的算术平均值:
x0 = Sum(x_k, k=1..n) / n
y0 = Sum(y_k, k=1..n) / n
然后翻译坐标:
x -> x-x0
y -> y-y0
新坐标的算术平均值为0,最佳线条经过(0,0),因此新的r现在为0,并且只能确定线的方向。
然后计算相关矩阵
Sum(x*x) Sum(x*y)
Sum(x*y) Sum(y*y)
然后计算该矩阵的特征向量。它是一个2x2矩阵,所以你不应该在这里遇到任何问题。让我们调用两个特征向量v1 =(x1,y1)和v2 =(x2,y2)。具有较小特征值的特征向量垂直于线,其他点平行于线。这意味着您可以将它们解释为x1 = sin(theta)和y1 = cos(theta)。
编辑最后,您必须将原始坐标的r计算为
r=x0*x1 + y0*y1