2017-09-12 9 views
-1

Je cherche à adapter une parabole aux données suivantes.Montage d'une parabole en utilisant Matlab polyfit

x = [-10:2:16]; 
y = [0.0334,0.0230,0.0145,0.0079,0.0033,0.0009,0.0006,0.0026,0.0067,0.0130,0.0213,0.0317,0.0440,0.0580]; 

[p,~,~] = polyfit(x,y,2); 

x2 = linspace(-10,16,100); 
y2 = polyval(p,x2); 

y3 = 0.0003.*x2.^2 -0.0006.*x2 + 0.0011; 
figure 
plot(x,y,'o',x2,y2,x2,y3) 

Cependant, l'ajustement ne correspond pas du tout aux données. Après avoir mis les données en Excel et en les ajustant à l'aide d'un polynôme de second ordre, j'obtiens un très bon ajustement. y = 0,0003x2 - 0,0006x + 0,0011 (excel tronchant les coefficients fausse un peu l'ajustement). Que se passe-t-il avec polyfit avec ces données?

Répondre

2

Résolu. Matlab vérifie le nombre de sorties demandées par l'utilisateur.

Depuis que j'ai demandé trois sorties même si je ne les utilisais pas, polyfit change les coefficients pour mapper vers un autre domaine xhat.

Si je place juste fait:

p = polyfit(x,y,2); 
plot(x2,polyval(p,x2)); 

Alors j'obtenir le résultat approprié. Pour récupérer la même réponse en utilisant les trois sorties:

[p2,S,mu] = polyfit(x,y,2); 
xhat = (x2-mu(1))./mu(2) 
y4 = polyval(p2,xhat) 
plot(x2,y4) 
+0

Eh oui ... comme indiqué dans les [documents] (https://fr.mathworks.com/help/matlab/ref/polyfit.html) – Wolfie

0

Je résoudre ce Matlab des moindres carrés:

x = [-10:2:16]'; 
Y = [0.0334,0.0230,0.0145,0.0079,0.0033,0.0009,0.0006,0.0026,0.0067,0.0130,0.0213,0.0317,0.0440,0.0580]'; 

plot(x,Y,'.'); 

A=[ones(length(x),1) x x.^2]; 
beta=A\Y; 
hold on 
plot(x, beta(1)+beta(2)*x+beta(3)*x.^2) 
leg_est=sprintf('Estimated (y=%.4f+%.4fx+%.4fx^2',beta(1),beta(2),beta(3)) 
legend('Data',leg_est) 

enter image description here