2017-09-12 1 views
-1

次のデータに放物線を合わせたいと思っています。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) 

ただし、フィットはデータとまったく一致しません。データをExcelに入れて二次多項式を使ってフィッティングした後、とてもフィット感があります。 y = 0.0003x2 - 0.0006x + 0.0011(係数を切り捨てることは、フィットを少し歪ませます)。このデータを持つpolyfitでは何が起こっていますか?

答えて

2

解決済み。

Matlabは、ユーザーが要求している出力の数を確認します。 3つの出力を使用していなくても3つの出力を要求したので、polyfitは係数を変更して別のドメインxhatにマップします。

私の代わりに行ったばかりの場合:

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

その後、私は適切な結果を達成するであろう。 3つの出力使用して同じ答えを回復するには:

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

うん... [ドキュメント]で述べたように( https://uk.mathworks.com/help/matlab/ref/polyfit.html) – Wolfie

0

を私は最小二乗法を使用して、MATLABでこれを解決するだろう:

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

関連する問題