1. 程式人生 > >利用MATLAB進行曲線擬合

利用MATLAB進行曲線擬合

http face alt gen show cat sca 輸入 image

軟件環境:MATLAB2013a

一、多項式擬合

多項式擬合是利用多項式最佳地擬合觀測數據,使得在觀測數據點處的誤差平方和最小。

在MATLAB中,利用函數ployfit和ployval進行多項式擬合。

函數ployfit根據觀測數據及用戶指定的多項式階數得到光滑曲線的多項式表示,polyfit的一般調用格式為:P = polyfit(x,y,n)。其中x為自變量,y為因變量,n為多項式階數。

polyval的輸入可以是標量或矩陣,調用格式為

  • pv = polyval(p,a)
  • pv = polyval(p,A)

其中,p為多項式表示,a為標量,A為矩陣。當輸入參數為M*N矩陣A時,函數返回值pv也是M*N矩陣,且pv(i,j) = polyval(p,A(i,j))。

1,多項式擬合示例:對ln(1+x)在[0,1]的采樣數據作多項式擬合

(1)對ln(1+x)在[0,1]內采樣得到觀測數據x、y。

>> x = 0:0.1:1.0;
>> y = log(1+x);

(2)調用函數polyfit對觀測數據x、y作三階多項式擬合。

>> P = polyfit(x,y,3)

運行結果如下:

技術分享

P對應的多項式為0.1079 - 0.3974x + 0.9825x2 + 0.004x3.

(3)分別作擬合曲線和理論曲線

>> xi = 0:0.01:1.0;
>> yi = polyval(P,xi);   %多項式求值
>> plot(x,y,ro); %觀測數據點 >> hold on; >> plot(xi,yi,k); %作擬合曲線 >> plot(xi,log(1+xi),g); %理論曲線 >> xlabel(x); >> ylabel(y); >> legend(采樣數據,擬合曲線,精確曲線);

效果如下:

技術分享

二、指數函數擬合

1,指數函數擬合示例:對 1 - √x 在[0,1]的采樣數據作指數函數擬合。

(1)對 1 - √x 在[0,1]內采樣得到觀測數據 x、y。

>> x = 0:0.01:0.99;
>> y = 1 - sqrt(x);

(2)調用函數polyfit對 x 、lny 作一階多項式擬合。

>> P = polyfit(x,log(y),1)

運行結果如下:

技術分享

(3)求得擬合曲線。

>> yi = exp(polyval(P,x));

(4)分別作觀測數據點、擬合曲線和理論曲線。

>> yi = exp(polyval(P,x));
>> plot(x,y,k.);
>> hold on;
>> plot(x,yi,r);
>> xlabel(x);
>> ylabel(y);
>> legend(采樣數據,擬合曲線);
>> hold off;

運行結果如下:

技術分享

(5)分析擬合誤差。

>> e = yi - y;
>> plot(x,e);
>> xlabel(x);
>> ylabel(誤差);

運行結果如下:

技術分享

三、交互式曲線擬合工具

MATLAB為用戶提供了一個交互式曲線擬合工具 Basic Fitting interface。通過該工具,我們無須編寫代碼就可以完成一些常用的曲線擬合。

(1)載入census data數據。

>> load census

此時MATLAB基本工作空間生成兩個double型列向量 cdate 和 pop,cdate 表示1790~1990內10年為間隔的年份,pop為對應年份美國的人口。

>> whos

運行結果如下:

技術分享

(2)作census data點圖。

>> plot(cdate,pop,ko);

運行結果如下:

技術分享

(3)在MATLAB的figure中選擇Tool → Basic Fitting,即得到Basic Fitting interface 界面。

技術分享

技術分享

用戶通過Plot fits面板選擇不同的曲線擬合方式,為了便於比較,我們可以選擇多種擬合方式,從而選擇效果最好的一種擬合。

如果某次擬合的效果較差,MATLAB會給出警告,這時用戶可以試著通過 Center and Scale X data 改善擬合效果。

如果Show equations復選框被選中,那麽圖形窗口會顯示擬合方程;如果Plot residuals復選框被選中,那麽擬合效果將顯示誤差余量。此外,還可以選擇不同的顯示類型,如Bar Plot(直方圖)、Scatter Plot(散點圖)、Line Plot(線圖)。

如果Show norm of residuals復選框被選中,那麽誤差余量圖將顯示誤差余量的範數。

單擊技術分享,得到如下界面,通過該界面我們能看到擬合的數值結果:

技術分享

再次單擊技術分享,得到如下界面。通過該界面右側的面板,我們可以得到任意點處擬合函數的值,如在編輯框中輸入 2000:10:2080,並單擊Evaluate按鈕,計算結果將顯示在列表框中。如果Plot evaluated result復選框被選中,那麽計算結果將顯示在擬合曲線中。

技術分享

利用MATLAB進行曲線擬合