2014-01-20 55 views
0

我正在matlab中使用polyfit繪製通過點最適合的直線。然而,最適合的線條並不像我所期望的那樣 - 線條看起來不像它適合數據那麼好......是嗎?這是我的代碼,任何幫助改善這一點都會很棒。 (請注意,我設置的軸限制很重要)。polyfit似乎不適合在matlab中的數據很好

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

你會期待什麼?這是一個普通的最小二乘擬合。 – Marcin

回答

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

這裏有一個總最小二乘解

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]) 
相關問題