【发布时间】:2023-03-25 20:09:01
【问题描述】:
我有一组点(x,y),我需要使用 MATLAB 找到穿过原点的最佳拟合线。
【问题讨论】:
-
您如何定义“最合适”的标准?最小二乘误差?
-
是的,没错——感谢您指出这一点很重要。
标签: algorithm matlab numerical curve-fitting least-squares
我有一组点(x,y),我需要使用 MATLAB 找到穿过原点的最佳拟合线。
【问题讨论】:
标签: algorithm matlab numerical curve-fitting least-squares
简而言之:你的函数必须是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 代码中,这很有用。
示例和代码sn-p:
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
【讨论】:
如果你有“曲线拟合工具箱”,你可以使用
f = fit( x, y, 'a*x' );
【讨论】:
一般来说,最佳拟合线穿过数据的质心(平均 x 和平均 y)。所以找到质心并绘制从原点到质心的线。
【讨论】: