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