數(shù)值計算課程設(shè)計-擬合方法與擬合函數(shù)的選取(共14頁)
精選優(yōu)質(zhì)文檔-傾情為你奉上題目:擬合方法與擬合函數(shù)的選取班級:數(shù)101班數(shù)102班數(shù)101班指導(dǎo)教師:譚高山 提交日期:2013年5月 13日專心-專注-專業(yè)目錄一、擬合問題的提出.1二、擬合準(zhǔn)則.1三、擬合函數(shù)的選取.1四、函數(shù)擬合實(shí).2 4.1 多項(xiàng)式擬合2 4.2 指數(shù)與復(fù)合函數(shù)擬合.4 4.3 分段擬合7五、總結(jié).12六、參考文獻(xiàn).12一、 擬合問題的提出在很多科學(xué)實(shí)驗(yàn)中,我們通過測量或觀察等方法獲得一組看上去雜亂無章的數(shù)據(jù),為了找出這些數(shù)據(jù)之間的某種規(guī)律和聯(lián)系,即尋找一個較簡單的函數(shù)曲線,使之在一定準(zhǔn)則下最接近這些數(shù)據(jù)點(diǎn),以便突顯各數(shù)據(jù)點(diǎn)的先后變化趨勢,由此便產(chǎn)生了曲線擬合的概念。曲線擬合在實(shí)際中有著很廣泛的實(shí)用價值。因?yàn)槲覀兯@取的實(shí)驗(yàn)數(shù)據(jù)本身往往帶有測量誤差,難免會出現(xiàn)個別數(shù)據(jù)誤差過大的現(xiàn)象。相比于插值法,曲線擬合時,不要求曲線嚴(yán)格地經(jīng)過每一個數(shù)據(jù)點(diǎn),這樣就能有效降低個別數(shù)據(jù)對整體數(shù)據(jù)規(guī)律的干擾作用;另外,實(shí)驗(yàn)數(shù)據(jù)往往很多,插值法會比較繁雜,擬合方法則更實(shí)際更高效。2、 擬合準(zhǔn)則 在曲線擬合中,有幾種不同的誤差準(zhǔn)則:1.最大誤差: 2. 平均誤差3. 均方根誤差4. 誤差平方和通過求誤差的最小值,可得該準(zhǔn)則下的最佳擬合曲線。由于誤差平方和容易進(jìn)行最小化計算,故而我們通常采用該標(biāo)準(zhǔn),稱之為最小二乘準(zhǔn)則。以下課程實(shí)驗(yàn)都是在最小二乘準(zhǔn)則下實(shí)現(xiàn)的。三、擬合函數(shù)的選取曲線擬合時,首要也最關(guān)鍵的一步就是選取恰當(dāng)?shù)臄M合函數(shù)。對于一組給定的數(shù)據(jù),我們可以先做出其散點(diǎn)圖,判斷應(yīng)該采用什么樣的曲線來作擬合,然后在直觀判斷的基礎(chǔ)上,選取多組曲線分別作擬合,然后比較,看哪條曲線的最小二乘指標(biāo)最小,也即擬合的最好。一般來說,選取多項(xiàng)式作為擬合曲線,是簡單且常用的。MATLAB中有現(xiàn)成的多項(xiàng)式擬合程序,調(diào)用格式為f=polyfit(x,y,n),其中輸入?yún)?shù)x,y為要擬合的數(shù)據(jù),n為擬合多項(xiàng)式的系數(shù),輸出參數(shù)f為擬合多項(xiàng)式的系數(shù)向量。對于稍微復(fù)雜一點(diǎn)的擬合曲線,我們可以先通過線性變換將之轉(zhuǎn)換成簡單的線性函數(shù),接著再用多項(xiàng)式擬合的命令f=polyfit(x,y,n)來實(shí)現(xiàn)函數(shù)的擬合。下面表格列舉兩個線性變換的例子:原函數(shù)y化為線性函數(shù)Y=AX+B型變量與常量的變化4、 函數(shù)擬合實(shí)例4.1多項(xiàng)式擬合例1.給定一組數(shù)據(jù)點(diǎn) 如下表:-1.5-0.700.51.92.22.93.84.27.523.982.993.5710.1812.7319.8131.9038.24首先,我們在MATLAB中輸入程序>> x=-1.5 -0.7 0 0.5 1.9 2.2 2.9 3.8 4.2;y=7.52 3.98 2.99 3.57 10.18 12.73 19.81 31.90 38.24;plot(x,y,'b*'),xlabel('x'),ylabel('y')title('表中數(shù)據(jù)點(diǎn)(xi,yi)的散點(diǎn)圖')運(yùn)行后得表中數(shù)據(jù)的散點(diǎn)圖如下(圖中*表示數(shù)據(jù)點(diǎn)的坐標(biāo)):因?yàn)閿?shù)據(jù)散點(diǎn)圖的變化趨勢與二次多項(xiàng)式很接近,所以可選用二次多項(xiàng)式作為擬合曲線,設(shè)f(x)=ax2+bx+c。編程:>> x=-1.5 -0.7 0 0.5 1.9 2.2 2.9 3.8 4.2;y=7.52 3.98 2.99 3.57 10.18 12.73 19.81 31.90 38.24;f=polyfit(x,y,2);a=f(1),b=f(2),c=f(3)X=-1.5:0.01:4.2;Y=polyval(f,X);f=polyval(f,x);fy=abs(f-y);E=sum(fy.2)plot(x,y,'r*',X,Y,'b-'),xlabel('x'),ylabel('y')title('擬合直線與數(shù)據(jù)點(diǎn)結(jié)合圖')運(yùn)行后得:a = 1.9974; b =0.0021; c = 3.0188;E = 0.0097生成如下圖形: 即擬合多項(xiàng)式為:f=1.9974x2+0.0021x+3.0188; 誤差很小,只有0.0097.4.2 指數(shù)與復(fù)合函數(shù)擬合例2.給出實(shí)驗(yàn)數(shù)據(jù)點(diǎn)如下表:xi2.70.12.31.60.71.40.3yi2.6411.043.214.037.104.589.37在MATLAB中輸入程序:>> x=2.7 0.1 2.3 1.6 0.7 1.4 0.3;y=2.64 11.04 3.21 4.03 7.10 4.58 9.37;>> plot(x,y,'b*'),axis(0,3,0,12)得散點(diǎn)圖:據(jù)圖,我們?nèi)煞N擬合函數(shù)分別為 和 :(1) 設(shè) ,在MATLAB中輸入程序>> x=2.7 0.1 2.3 1.6 0.7 1.4 0.3;y=2.64 11.04 3.21 4.03 7.10 4.58 9.37;Y=log(y);f=polyfit(x,Y,1);A=f(2);B=f(1);a=exp(A),b=-BX=0:0.01:3;Y=a*exp(-b.*X);f=a*exp(-b.*x);plot(x,y,'r*',X,Y,'b-'),xlabel('x'),ylabel('y')legend('數(shù)據(jù)點(diǎn) (xi,yi)','擬合曲線Y=f(x)')title('數(shù)據(jù)點(diǎn)(xi,yi)和擬合曲線Y=f(x)的圖形')fy=abs(f-y);E1=sum(fy.2)得:a =10.7441; b =0.5460; E1 = 1.3072.(2) 設(shè) ,在MATLAB中輸入程序x=2.7 0.1 2.3 1.6 0.7 1.4 0.3;y=2.64 11.04 3.21 4.03 7.10 4.58 9.37;Y=1./y;f=polyfit(x,Y,1);a=f(1),b=f(2)X=0:0.01:3;Y=1./(a.*X+b);f=1./(a.*x+b);plot(x,y,'r*',X,Y,'b-'),xlabel('x'),ylabel('y')Legend('數(shù)據(jù)點(diǎn)(xi,yi)','擬合曲線Y=f(x)')Title('數(shù)據(jù)點(diǎn)(xi,yi)和擬合曲線Y=f(x)的圖形')Fy=abs(f-y);E2=sum(fy.2)得:a =0.1089; b =0.0720; E2 =0.0097. 因?yàn)镋1E2,顯然第二種擬合曲線的誤差較小,擬合效果更佳。4.3 分段擬合實(shí)際中的很多科學(xué)實(shí)驗(yàn)數(shù)據(jù),其擬合函數(shù)都比較稍顯復(fù)雜,下面我們來列舉一例。例3. 革螨在不同濃度的甲酚皂液的平均致死時間如下表顯示:X甲酚皂液的濃度(%)Y革螨的平均死亡時間(min)0.10050.40.15041.20.17533.60.20019.00.30011.60.40010.60.5008.40.6006.80.7006.21.0004.85.0002.210.0001.2用MATLAB作散點(diǎn)圖:分析上圖可知,曲線的兩端都含有漸近線,故全段擬合曲線中一定含有指數(shù)項(xiàng)。>> x=0.100 0.150 0.175 0.200 0.300 0.400 0.500 0.600 0.700 1.000 5.000 10.000;y=50.4 41.2 33.6 19.0 11.6 10.6 8.4 6.8 6.2 4.8 2.2 1.2;Y=log(y);f=polyfit(x,Y,1);A=f(2);B=f(1);a=exp(A),b=-BX=0:0.01:10;Y=a*exp(-b.*X);f=a*exp(-b.*x);plot(x,y,'r*',X,Y,'b-'),xlabel('x'),ylabel('y')legend('數(shù)據(jù)點(diǎn) (xi,yi)','擬合曲線Y=f(x)')title('數(shù)據(jù)點(diǎn)(xi,yi)和擬合曲線Y=f(x)的圖形')fy=abs(f-y);E1=sum(fy.2)得:a =15.6609; b =0.2978; E1 =2.4705e+003 即擬合函數(shù)為: 顯然,擬合效果不佳。進(jìn)一步分析可以看出,前9個點(diǎn)有一條漸近線,而后3個點(diǎn)有一條漸近線。可將要擬合的曲線分為二段,前9個點(diǎn)為前段,后3個點(diǎn)為后段。我們可以分別對前9個點(diǎn)和后3個點(diǎn)進(jìn)行直線化。以x為橫坐標(biāo),lny 為縱坐標(biāo),做散點(diǎn)圖plot(x,log(y),'b*')得可以看出后三個點(diǎn)明顯呈直線趨勢,我們先對后三個點(diǎn)進(jìn)行直線化。擬合的方法和前面相同,在MATLAB中輸入x=1.000 5.000 10.000;y= 4.8 2.2 1.2;Y=log(y);f=polyfit(x,Y,1);A=f(2);B=f(1);a=exp(A),b=-B得:a =5.2635;b =0.1527;即 從圖3發(fā)現(xiàn)前9個點(diǎn)仍呈曲線趨勢,需要進(jìn)一步線性化。具體步驟如下:利用(4)求得前9個點(diǎn)處的函數(shù)值y,再把實(shí)際數(shù)據(jù)中的前9個值減去y。即得y”=y-y,然后取其對數(shù)值ln(y”),用MATLAB作出這些點(diǎn)圖象,在MATLAB下不需要一個個去求,只要在命令窗口輸入如下命令: >> x=0.100 0.150 0.175 0.200 0.300 0.400 0.500 0.600 0.700;y=50.4 41.2 33.6 19.0 11.6 10.6 8.4 6.8 6.2;plot(x,log(y-(5.2635.*exp(-0.1527*x),'b*')得:可以發(fā)現(xiàn)這9個點(diǎn)成一定的曲線趨勢,利用x和 y的值可建立起直線回歸方程。只要在MATLAB下用同樣的方法再次求指數(shù)擬合>> x=0.100 0.150 0.175 0.200 0.300 0.400 0.500 0.600 0.700;y=50.4 41.2 33.6 19.0 11.6 10.6 8.4 6.8 6.2;Y=log(y-(5.2635.*exp(-0.1527.*x);f=polyfit(x,Y,1);A=f(2);B=f(1);a=exp(A),b=-B得a = 62.55659;b = 5.7270;即 由于前段各點(diǎn)在后段直線的上方,故最終的擬合函數(shù)應(yīng)為y=(4)+(5),即 在MATLAB中做出散點(diǎn)和擬合曲線>> x=0.100 0.150 0.175 0.200 0.300 0.400 0.500 0.600 0.700 1.000 5.000 10.000;y=50.4 41.2 33.6 19.0 11.6 10.6 8.4 6.8 6.2 4.8 2.2 1.2;X=0:0.01:10;Y=5.2635.*exp(-0.1527.*X)+62.55659.*exp(-5.7270.*X);得下圖:顯然,所求擬合函數(shù)令人滿意。五、總結(jié)函數(shù)擬合是一種實(shí)用性很強(qiáng)的數(shù)學(xué)方法,例如,可以用來尋求血藥濃度變化規(guī)律,用來測定彈簧彈力與伸長量之間的關(guān)系等等,總之它涉及生活學(xué)習(xí)的方方面面。另外,在實(shí)例分析中,我們通常都能先根據(jù)邏輯方法確定數(shù)據(jù)之間遵循的函數(shù)類型,所以很多時候只需確定一種擬合函數(shù)即可。值得注意的是,要學(xué)會通過不同途徑去盡量減少函數(shù)擬合的誤差。六、參考文獻(xiàn)1.數(shù)值分析第七版,Richard L.Burden,J.Douglas Faires,高等教育出版社。2.數(shù)值分析及其MATLAB實(shí)現(xiàn),任玉杰著,高等教育出版社。