摘要:歸納總結了非線性曲線擬舍的方法、求解步驟和上機操作過程。
關鍵詞:曲線擬合 非線性 MATLAB
中圖分類號:TP311.131 文獻標識碼:B 文章編號:1002-2422(2008)01-0057-03
1 曲線擬合的基本原理
已知一組測定的數據(例如N個點(xi,yi)去求得自變量x和因變量y的一個近似解析表達式y=φ(x)。若記誤差δi=φ(xi)-yi,i=1,2,…N,則要使誤差的平方和最小,即要求:為最小,這就是常用的最小二乘法原理。

2 MATLAB曲線擬合的相關方法
2.1函數形式:
(1)多項式擬合函數polyfit,調用格式為:
p=polyfit(x,y,n)
其中x,y為參與曲線擬合的實驗數據,n為擬合多項式的次數,函數返回值為擬合多項式的系數(按降冪排列)。n=1時,就為線性擬合。

例1:給出表1數據,試用最小二乘法求一次和二次擬合多項式。
在MATLAB命令窗口中輸入:
clear;close;
x=-1:0.25:1;
y=[0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4.2836];
p1=polyfit(x,y,1)
p1=2.2516 2.0131
p2=polyfit(x,y,2)
p2=0.0313 2.2516 2.0001
y1=polyval(p1,x);
y2=polyval(p2,x);
plot(x,y,‘+’,x,y1,‘r:’,x,y2,‘k-.’)擬合多項式為:y*=2.0516+2.0131和y*=0.0313x2+2.2516x+2.20001。
(2)非線性數據擬合函數lsqcurvefit調用格式為:
c=lsqcurvefit(‘fun’,x0,xdata,ydata)
其中‘fun’為擬合函數的M-函數文件名,x0為初始向量,xdata,ydata為參與曲線擬合的實驗數據。函數返回值c為非線性函數fun的擬合系數。

例2:2004年全國大學生數學建模競賽C題(酒后駕車)中給出某人在短時間內喝下兩瓶啤酒后,間隔一定的時間測量他的血液中酒精含量y(毫克佰毫升),得到數據如表2。
通過建立微分方程模型得到短時間內喝酒后血液中酒精濃度與時間的關系為:
y=c1(e-c2t-e-c3t)
(2)
根據實驗數據,利用非線性擬合函數lsqcurvefit,確定模型(2)式中的參數c1,c2,c3。求解過程為:

先編寫一個M-函數文件Example2_1
function f=Example2_1(c,tdata)
f=c(1)*(exp(-c(2)*tdata)-exp(-c(3)*tdata));保存后,在命令窗口中輸入:
tdata=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 1011 12 13 14 15 16];
ydata=[30 68 75 82 82 77 68 68 58 51 50 41 38 35 28 2518 15 12 10 7 7 4];
c0=[1 1 1];
for i=1:50
c=lBqcurvefit(“Example2_1”,c0,tdata,ydata);
c0=c;
end
得到最優解為:c=114.2587 0.1852 2.0124
從而得出擬合曲線:
y*=114.2587(e-0.1852t-e-2.0124t)
(3)
2.2圖形窗口形式
(1)利用多項式擬合的交互圖命令(GUI)polytool,調用格式為:polytool(x,y)
其中x,y分別為實驗數據構成的向量,例如利用poly-tool求解例1的MATLAB命令如下:
x=-1:0.25:1;
y=[-0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4.2836];
polytool(x,y)
打開多項式擬合的交互式界面,由于要擬合的函數為線性函數,因此在多項式擬合交互式界面中的Degree中輸入1,點擊導出數據Export,出現保存對話框Export toWorkspace,選中Pammetem(參數),Residuals(殘差)后點擊OK,在MATLAB的Workspace窗口中可以看到參數為:2.2516和2.0131,即擬合函數為y*=2.2516x+2.0131。同樣如果擬合的函數為二次函數,則只要在Degree中輸入2,其它步驟相同,可得擬合函數為:
y*=0.0313x2+2.2516x+2.0001
通過查看Residuals(殘差)值,可以發現二次函數擬合的殘差值比線性函數的要小一些,從擬合的效果看,可以選擇二次函數作為擬合函數,但由于線性函數較簡單,殘差值也很小,從簡單出發,也可選擇線性函數作為擬合函數。
(2)基本擬合界面
MATLAB提供了一個方便簡潔的擬合界面。具有擬合快速和操作簡便的優勢,只能擬合多項式。例如用基本擬合界面求解例1的過程如下:
clear,dose;
x=-1:0.25:1;
y=[-0.2209,0.3295,0.8826,1.4392,2.0003,2.5645,3.1334,3.7061,4。2836];
plot(x,y,‘+’);
在散點圖的圖形窗口上分別點擊菜單檔中的Tools Basic Fitting。在Plots Fits中分別選中linear、quadratic、Show equations、plot residuals、show norm of residuals,所得擬合直線方程為:y*=2.3x+2;擬合二次多項式為:y*=0.031x2+2.3x+2。
(3)曲線擬合工具界面cftool
曲線擬合工具界面cftool是一個可視化的圖形界面,具有強大的圖形擬合功能,下面通過一個具體例子來介紹cftool的用法。
例3某生化系學生為研究嘌呤霉素在某項酶促反應中對反應速度與底物濃度之間關系的影響,設計了一個實驗,所得的實驗數據見表3。根據問題的背景和數據建立一個合適的數學模型,來反映這項酶促反應的速度與底物濃度之間的關系。
酶促反應的速度y與底物濃度x之間的關系可用下面兩個簡單模型描述:

使用曲線擬合工具界面cftool來確定模型(4)和(5)中的參數,并比較模型(4)、(5)的擬合效果。
在MATLAB命令窗口中輸入以下語句:
clear;close;
x=[0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 1.10 1.10];
y=[76 47 97 107 123 139 159 152 191 201 207 200];
cftool(x,y);
在“Curve Fitting Tool”對話框中單擊“Fitting”,打開“Fit-tin”對話框,點擊“New fit”,在“Fit Name:”中輸入“有理函數”,在“Type of fit”中選中“Rational”,在“Numerator”中選中“Hnear polynomialn,在\"Denominator”中選中“linear polynomi-al”,然后點擊“Apply”,完成有理函數擬合。然后,再次點擊“New fit”,在“Fit Name:”中輸入“指數函數”,在“Type of fit”中選中“Custom Equation”,點擊“New equation”,打開用戶自定義方程對話框,點擊“General Equation”,在“Equation”中輸入“y=a*(1-exp(-b*x))”,點擊“Ok”后回到擬合窗口,點擊“Apply”,完成指數函數擬合,參數計算結果見表4。

通過表4可以看出,有理函數(Michaelis-Menten模型)
擬合剩余標準差較小,R-square較大(越接近1越好),故用有理函數
擬合數據比用指數函數y*=192.1(1-e-11.38x)擬合的效果好。
3 結束語
利用MATLAB的繪圖功能和曲線擬合功能,可以很方便地進行多項式擬合和其它非線性曲線擬合,并可以通過比較剩余標準差和可決系數R2的大小,來對比不同曲線的擬合效果。從而在不知數學模型情況下,也能根據數據的散點圖找出較優的曲線來擬合數據。