将通过原点(0,0)的线拟合到数据

时间:2012-09-19 13:08:31

标签: algorithm matlab numerical curve-fitting least-squares

我有一组点(x,y),我需要找到使用MATLAB通过原点的最佳拟合线。

3 个答案:

答案 0 :(得分:14)

简而言之:您的功能必须采用y=ax+0的形式,这会使polyfit无用。但您可以使用最小二乘法:

 a = x(:)\y(:);

说明:

您需要找到n个等式和一个变量a

 a*x1 = y1;
 a*x2 = y2;
 ...
 a*xn = yn;

运算符\找到最小二乘解。

或者,您可以手动找到解决方案:

 a = (x'*x) \ (x'*y);

或伪代码:

     (x1*y1 + x2*y2  + ... xn*yn)
a =  ----------------------------
     (x1*x1 + x2*x2  + ... xn*xn)

如果您不使用Matlab,这很有用 - 例如在C代码中。


示例和代码段:

enter image description here

function FindLSSolution()
    a = 2.5;
    x = rand(100,1)*10;
    y = a*x + randn(100,1);
    figure;scatter(x,y);

    A = x(:)\y(:);
    hold on;plot(x, A*x,'g');
end

答案 1 :(得分:2)

如果你有“曲线拟合工具箱”,你可以使用

f = fit( x, y, 'a*x' );

答案 2 :(得分:2)

通常,最佳拟合线穿过数据的质心(平均 x 和平均 y)。所以找到质心并绘制从原点到质心的线。