?

Matlab在曲線擬合中的應用

2017-06-13 13:25徐嬌艷
科學與財富 2017年16期
關鍵詞:曲線擬合數據誤差

徐嬌艷

摘要:近年來利用Matlab進行曲線擬合解決問題的情況較多。本文通過比較介紹了Matlab在曲線擬合中的常見應用方法 。

關鍵詞:數據 曲線擬合 誤差

曲線擬合是用連續曲線近似地描述平面上離散點組所表示的坐標之間函數關系或內在規律的一種數據處理方法。在實際工作中,通過實驗或觀測到x與y的一組數據對(xi,yi),i=l,2,…,m,其中各xi是不同的。人們希望用一類與數據規律相切合的函數表達式y=f(x,c)來反映量x與y之間的關系,即在某種程度上"最佳"地擬合已知數據。f(x,c)稱作擬合函數,其圖像稱作擬合曲線,c為待定參數[1]。C++和Fortran等傳統的語言編程也能實現擬合算法,但工作量大且繁瑣。Matlab提供了強大的矩陣處理和繪圖功能,操作簡便,能高效求解各種復雜工程問題并實現計算結果的可視化。Matlab本身有擬合函數,還有一個曲線擬合工具箱[2]。

擬合求得數學模型后要將實際測定的數據與用公式求出的理論值進行比較,判定其誤差程度[1]。根據這個誤差衡量擬合曲線的優劣。

以90系列液壓泵在工作壓力210bar及420bar下的典型容積效率曲線(圖1)為例來求解泵的轉速與容積效率函數關系式。從圖上取幾組數據來研究泵的轉速與容積效率關系(相同壓力下機械效率ηt可視為定值,當p=420bar時):

先在Matlab工作窗口中輸入下面程序,將已有數據繪在坐標圖上,如圖2。

x=[585 663 975 1365 1716 2340 2925 3510 3900];

y=[0.83 0.85 0.875 0.89 0.90 0.91 0.914 0.917 0.915];

plot(x,y,'r*'),legend('實際數據(n,ηv)'),xlabel('n(r/min))'),ylabel('ηv ')

Matlab中求擬合的方法較多,下面對幾種常見的方法進行介紹。

1.線性最小二乘法

基本思路是選定一個含有待定系數的函數,使已有數據點與此函數曲線的距離平方和最小,再求出待定系數。此處以三階函數為例(轉速和效率分別用x、y表示):

1)編程法

fi=a1.*x.^3+a2.*x.^2+a3.*x+a4

解得擬合函數f及其系數如下:

f=7078176274323559/1237940039285380274899124224*x^3-

7683900961798595/151115727451828646838272*x^2+

5538405443557303/36893488147419103232*x+

3449538203694265/4503599627370496

運行后顯示數據與擬合函數f的最大誤差Ew=0.0075,平均誤差E1=0.0034和均方根誤差E2=0.0040及數據點與擬合曲線的圖形,如圖3所示。

可見,所得擬合曲線基本符合數據點的變化規律,最大誤差、平均誤差和均方根誤差都比較小,但精度不是很好。

2)內建函數法

前面提到過Matlab本身有用于曲線擬合的內建函數,例如polyfit函數,命令polyfit(x,y,n)就是用最小二乘法對所給數據進行n階多項式擬合,返回擬合多項式p(x),使得p(x(i))~=y(i)。用polyfit函數對所取數據進行曲線擬合[2],發現采用內建函數法所得3階多項式的系數與編程法一樣。但前者程序復雜,數據很大,運行時對計算機的要求高。相比后者就顯得非常簡便,只需調用一個命令。但擬合精度都不太高。并且我們還計算了4階、5階、6階的擬合曲線,發現階數越高,擬合曲線經過的數據點就越多。且擬合的階數太高,Matlab系統自動給出警告信息,提醒過高的階數會產生不太好的結果。

2.插值逼近法

插值法是根據數據的分布規律,找到一個函數來連接已知的各點。這里介紹一維插值, Matlab中一維插值可由interpl()函數求解。例如y1= interpl(x,y,x1,方法),其中x、y分別表示給定的一組自變量和函數值,x1為一組新的插值點,得出的y1是在插值點處的結果。常用的插值函數有:分段線性插值、Hermite插值及三次樣條插值等。下面用三種插值方法進行擬合。輸入x、y對應的數據組及方法后,運行結果如圖5所示。

總體上看:分段線性插值曲線不太光滑;三次樣條插值運行時間很長;三次Hermite插值占用內存最大。實際問題中,應綜合考慮插值函數的收斂性、穩定性以及光滑性的來選擇。

3.曲線擬合工具箱

曲線擬合工具箱是專門為數據集合進行曲線擬合而設計的。它集成了用Matlab建立的圖形用戶界面和M文件函數。利用工具箱的庫方程(如線性,二次,高階多項式,指數,傅立葉等)或是用戶自定義函數進行參數擬合。在Matlab的命令窗口里輸入 x和y的數據組,接著輸入"cftool"命令,進入曲線擬合工具箱界面。

1)點擊"Data"按鈕,修改數據集名將曲線命名為ηv vs. n,然后點擊"Create data set"按鈕,返回工具箱界面,這時發現已經自動畫出數據集的曲線圖[3];

2)點擊"Fitting"按鈕,修改擬合項目名稱為ηv vs. n。然后選擇擬合曲線的類型,工具箱提供的類型有:用戶自定義的函數類型、指數、傅立葉、高斯、插值和多項式等11種[3]。

選好后點擊"Apply"按鈕,在Results框中得到如下擬合結果:

對比發現,有理數分子分母為線性的擬合曲線最接近已知泵的轉速效率曲線,其擬合結果為:

函數形式 f(x) = (p1*x + p2) / (x + q1)

其方差3.851e-005,決定系數0.9951,校正后的決定系數0.9935,標準差0.002533,方差和標準差接近0、決定系數和校正后的決定系數接近1表示較好的擬合結果。而有理數分子分母為線性的擬合方差和標準差最小,兩個系數最接近1。故p=420bar時,泵的轉速和容積效率函數關系式近似為:

ηv= (0.9293n-143)/(n-103.7)

此時直接選用有理數分子分母為線性的曲線擬合,得出p=210bar時,泵的轉速和容積效率函數關系式近似為:

ηv= (0.9685n-202.4)/(n-196.8)

此處所選有理數分子分母為線性的曲線擬合只在本例中為最佳曲線擬合,不代表所以情況,不同情況要經過計算比較后確定。

參考文獻

[1]申紅蓮. Matlab中曲線擬合的方法[J]. 福建電腦, 2010(7): 10-11

[2]百度文庫. matlab曲線擬合. http://wenku.baidu.c, 2012-11-26

[3]晨宇思遠. Matlab的曲線擬合工具箱CFtool使用簡介.

猜你喜歡
曲線擬合數據誤差
角接觸球軸承接觸角誤差控制
Beidou, le système de navigation par satellite compatible et interopérable
壓力容器制造誤差探究
曲線擬合的方法
基于曲線擬合的投棄式剖面儀電感量算法
公路工程試驗檢測存在的問題及措施
一種借助數據處理構建的智能食堂管理系統
Matlab曲線擬合工具箱在地基沉降預測模型中的應用
Matlab曲線擬合法在地基沉降預測中的應用
九十億分之一的“生死”誤差
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合