我在matlab中使用polyfit来绘制通过点的最佳拟合直线。然而,最好的拟合线并不像我期望的那样 - 线看起来不像它非常适合数据......是吗?这是我的代码,任何改进这方面的帮助都会很棒。 (注意,我设置的轴限制很重要)。
x = [0 1 10 5 1 1.5];
y = [-14 -18 -22 -26 -30 -34];
scatter(x,y)
hold on
p = polyfit(x,y,1);
f = polyval(p,x);
plot(x,f,'-r','linewidth',1.2)
ylim([-35 -10])
xlim([-30 30])
答案 0 :(得分:1)
你的健康状况对我来说很合适,但这可能就是你要找的东西
x = [0 1 10 5 1 1.5];
y = [-14 -18 -22 -26 -30 -34];
scatter(x,y)
hold on
p = polyfit(y,x,1);
f = polyval(p,y);
plot(f,y,'-r','linewidth',1.2)
ylim([-35 -10])
xlim([-30 30])
答案 1 :(得分:1)
这是一个总体最小二乘解决方案
data=[x(:), y(:)];
c=mean(data);
data=bsxfun(@minus,data,c);
[~,~,v]=svd(data);
d=v(:,end);
k=dot(d,c);
ezplot(@(x,y) x*d(1)+ y*d(2)-k, [-30 30 -35 -10])