2015-01-10 81 views
0

我需要擬合數據例如x,y,CI(其中CI是y的置信度指數)。如何將多項式擬合成一些誤差條數據

現在,我用這個代碼:

pf = polyfit(x, y, 2); 
x1 = min(x):.1:max(x); 
y1 = polyval(pf, x1); 

figure 
hold on 
errorbar(x, y, CI, 'ko'); 
plot(x1, y1, 'k'); 
hold off 

當然,擬合出來的一些錯誤吧,這是正確的。

我想獲得一個更接近低置信度指數的擬合曲線,並丟棄具有高置信度指數的點。

謝謝你,再見,
賈科莫

回答

1

你在找什麼是加權最小二乘。您可以使用函數lscov來計算它們。在幫助頁面中有一個很好的例子,但我會盡量使它更清晰。

讓我們構造一個簡單的拋物線,有一個損壞的點

x = (0:0.1:1)'; 
y = 0.5*x.^2; 
y(5) = 3*y(5); 

,並給予一定的權重

w = ones(size(y)); 
w(5) = 0.1; 

下一頁構建Vandermonde矩陣(see here for the code),並解決系統

%// V = [x.^2 x ones(size(x))]; 
V = bsxfun(@power, x, 2:-1:0); 
coeff = lscov(V, y, w); 

有和沒有權重的估計係數是

   x^2  x  1 
with weights [0.4797 0.0186 -0.0004] 
no weights [0.3322 0.1533 -0.0034] 

請注意,在你的情況下w將不得不倒置。

如果你不喜歡打造Vandermonde矩陣,以及您對曲線擬合工具箱許可,您可以使用下面的代碼

ft = fittype('poly2'); 
opts = fitoptions('Method', 'LinearLeastSquares'); 
opts.Weights = w; 
fitresult = fit(x, y, ft, opts); 

,你會得到相同的結果。

+0

謝謝你,喬米。明天我會嘗試你的解決方案。謝謝你的解釋。 –

相關問題