9

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

4

3 回答 3

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 代码中,这将非常有用。


示例和代码片段:

在此处输入图像描述

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
于 2012-09-19T13:17:42.710 回答
3

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

f = fit( x, y, 'a*x' );
于 2012-09-19T13:27:16.583 回答
2

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

于 2021-02-27T22:28:33.830 回答