2014-01-20 6 views
0

Я использую polyfit в matlab, чтобы построить прямую линию наилучшего соответствия точкам. Тем не менее, линия наилучшей подгонки не такая, как я ожидал бы - линия не выглядит так, как она очень хорошо подходит данным данным ... не так ли? Вот мой код, любая помощь в улучшении этого будет замечательной. (Обратите внимание, что ограничения оси, которые я установил, важны).Полифит не очень хорошо подходит для данных в 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]) 
Смежные вопросы