拉格朗日插值試驗報告_第1頁
拉格朗日插值試驗報告_第2頁
拉格朗日插值試驗報告_第3頁
拉格朗日插值試驗報告_第4頁
拉格朗日插值試驗報告_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗名稱:實驗一拉格朗日插值1引言我們在生產(chǎn)生活中常常會遇到這樣的問題:某個實際問題中,函數(shù)f(x)在區(qū)間a,b上存在且連續(xù),但卻很難找到其表達式,只能通過實驗和觀測得到有限點上的函數(shù)表。顯然,根據(jù)這些點的函數(shù)值來求其它點的函數(shù)值是非常困難的。有些情況雖然可以寫出表達式,但結(jié)構(gòu)復(fù)雜,使用不方便。所以我們總是希望根據(jù)已有的數(shù)據(jù)點(或函數(shù)表)來構(gòu)造某個簡單函數(shù)P(x)作為f(x)的近似值。插值法是解決此類問題的一種比較古老的、但卻很常用的方法。它不僅直接廣泛地應(yīng)用于生產(chǎn)實際和科學研究中,而且也是進一步學習數(shù)值計算方法的基礎(chǔ)。2實驗?zāi)康暮鸵筮\用Matlab編寫三個.m文件,定義三種插值函數(shù),要求一

2、次性輸入整張函數(shù)表,并利用計算機選擇在插值計算中所需的節(jié)點。分別通過分段線性插值、分段二次插值和全區(qū)間上拉格朗日插值計算f(0.15),f(0.31),f(0.47)的近似值。已知函數(shù)表如下:x0.00.10.1950.30.4010.5f(x)0.398940.396950.391420.381380.368120.352063算法原理與流程圖(1)原理設(shè)函數(shù)y二在插值區(qū)間a,b上連續(xù),且在n+1個不同的插值節(jié)點a0,x1,,x&b上分別取值y0,y1,yn。目的是要在一個性質(zhì)優(yōu)良、便于計算的插值函數(shù)類中,求一簡單函數(shù)P(x),滿足插值條件P(xi)=yi(i=0,1,/)而在其他點

3、xE上,作為f(x)近似值。求插值函數(shù)P(x)的方法稱為插值法。在本實驗中,采用拉格朗日插值法。分段低次插值當給定了n+1個點x0<x1<-<xn上的函數(shù)值y0,y1,y后,若要計算xf處函數(shù)值f(x)的近似值,可先選取兩個節(jié)點xi-1與xi使xCxxi,然后在小區(qū)間xi-1,xi上作線性插值,即得這種分段低次插值叫分段線性插值,又稱折線插值。類似地,我們可以選取距離x最近的三個節(jié)點xi-1,xi與xi+1,然后進行二次插值,即得這種分段低次插值叫分段二次插值,又稱分段拋物線插值。全區(qū)問上拉格朗日插值對節(jié)點xi(i=0,1,州任一點xk(0&k0,n詐一n次多項式lk

4、(x),使它在該點上的取值為1,在其余點xi(i=0,1,-kk+1,nt取值為零。對應(yīng)于每一節(jié)點xk(k=0,1,,n)都能寫出一個滿足此條件的多項式,這樣寫出了n+1個多項式1o(x),1i(x),丹僅),其中l(wèi)k(x)Ak(xx0)(xx1)L(xxk1)(xxk1)L?(xxn);由條件lk(xk)1可得于是我們可以得出如下的拉格朗日n次插值多項式(對于全區(qū)間上的插值,n取函數(shù)表的長度)(2)流程圖分段線性插值分段二次插值全區(qū)間拉格朗日插值4程序代碼及注釋1、分段線性插值%分段線性插值functiony=piece_linear(x0,y0,x)%x0,y0為已知點,x為待求點n=le

5、ngth(x0);p=length(y0);m=length(x);%n,p,m#別為x0,y0,x長度ifn=pfprintf('Error!Pleaseinputagain!n');%*0和丫0長度不等時,報錯elsefori=1:mz=x(i);sum=0.0;l=0;%合l賦初值,根據(jù)x的值確定lifz<x0(1)|z>x0(n)fprintf('Error!x(%d)isoutofrange!n',i);break;end%當插值點超出范圍時,報錯forj=2:nifz<x0(j)l=j;endifl=0break;endend%一旦

6、l有非零值,則終止循環(huán),選出合適的lfork=l-1:la=1.0;fors=l-1:lifs=ka=a*(z-x0(s)/(x0(k)-x0(s);endendsum=sum+y0(k)*a;endy(i)=sum;fprintf('y(%d)=%fnx1=%,3fy1=%,5f,x2=%,3fy2=%,5fnn',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l);%輸出插值結(jié)果和所需節(jié)點endendend2、分段二次插值%分段二次插值functiony=piece_square(x0,y0,x)%x0,y0為已知點,x為待求點n=length(x0);p

7、=length(y0);m=length(x);%n,p,n#別為x0,y0,x長度ifn=pfprintf('Error!Pleaseinputagain!n');%x0和y0長度不等時,報錯elsefori=1:mz=x(i);sum=0.0;l=0;%合l賦初值,根據(jù)x的值確定lifz<x0(1)|z>x0(n)fprintf('Error!x(%d)isoutofrange!n',i);break;end%當插值點超出范圍時,報錯forj=1:n-2p=0.5*(x0(j)+x0(j+1);ifz<pl=j;endifl=0break;

8、end%一旦l有非零值,則終止循環(huán),選出合適的lendifl=0l=n-1;end%輸入正確時,若l還等于零,l=n-1fork=l-1:l+1a=1.0;fors=l-1:l+1ifs=ka=a*(z-x0(s)/(x0(k)-x0(s);endendsum=sum+y0(k)*a;endy(i)=sum;fprintf('y(%d)=%fnx1=%.3fy1=%.5fnx2=%.3fy2=%.5fnx3=%.3fy3=%.5fnn',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l),x0(l+1),y0(l+1);%輸出插值結(jié)果與所需節(jié)點endenden

9、d3、拉格朗日全區(qū)間插值%拉格朗日全區(qū)間插值functiony=lagrange(x0,y0,x)%x0,y0為已知點,x為待求點n=length(x0);p=length(y0);m=length(x);%n,p,m另J為x0,y0,x長度ifn=pfprintf('Error!Pleaseinputagain!n');%x0和y0長度不等時,報錯elsefori=1:mz=x(i);s=0.0;ifz<x0(1)|z>x0(n)fprintf('Error!x(%d)isoutofrange!n',i);break;end%當插值點超出范圍時,報

10、錯fork=1:np=1.0;forj=1:nifj=kp=p*(z-x0(j)/(x0(k)-x0(j);endends=p*y0(k)+s;endy(i)=s;fprintf('y(%d)=%.5fn',i,y(i);%輸出插值結(jié)果endendend5算例分析1、測試示例>>x=1234;>>y=234;>>y2=lagrange(x,y,x0)Error!Pleaseinputagain!>>x=1234;>>y=2345;>>x0=0.55.5;>>y2=lagrange(x,y,x0)

11、Error!x(1)isoutofrange!>>x=1234;>>y=2345;>>x0=1.55.5;>>y2=lagrange(x,y,x0)y(1)=2.50000Error!x(2)isoutofrange!y2=2、首先輸入函數(shù)變及待求點>>x=0.00.10.1950.30.4010.5;>>y=0.398940.396950.391420.381380.368120.35206;>>x0=0.150.310.47;注:保證在matlab工作目錄中有三個.m文件3、分段線性插值y0=piece_l

12、inear(x,y,x0)y(1)=0.394039x1=0.100y1=0.39695,x2=0.195y2=0.39142y(2)=0.380067x1=0.300y1=0.38138,x2=0.401y2=0.36812y(3)=0.356927x1=0.401y1=0.36812,x2=0.500y2=0.35206y0=4、分段二次插值>>y1=piece_square(x,y,x0)y(1)=0.394460x1=0.100y1=0.39695x2=0.195y2=0.39142x3=0.300y3=0.38138y(2)=0.380225x1=0.195y1=0.39

13、142x2=0.300y2=0.38138x3=0.401y3=0.36812y(3)=0.357247x1=0.300y1=0.38138x2=0.401y2=0.36812x3=0.500y3=0.35206y1=5、全區(qū)間拉格朗日插值>>y2=lagrange(x,y,x0)y(1)=0.39447y(2)=0.38022y(3)=0.35722y2=6討論與結(jié)論1、使用tic,toc函數(shù)計算下列四種方法計算上述問題所運行的時間Functionlagrange(x0,y0,x)piece_linear(x0,y0,x)piece_square(x0,y0,x)運行時間(s)0

14、.0002720.0003750.000272從三次實驗結(jié)果可知,三個程序的運行時間都很短。2、程序優(yōu)化由分段線性插值和分段二次插值的原理,x取值在函數(shù)表范圍內(nèi)時,插值結(jié)果有意義,而當x取值在函數(shù)表范圍以外,利用分段線性插值公式仍可以進行運算并得到一個值,但其結(jié)果不準確;分段二次插值則無法找到三個合適的點以求插值,不予以輸出結(jié)果;若輸入的函數(shù)表x與y的長度不相等,則無法插值。所以加入以下判斷以提高插值的準確性n=length(x0);p=length(y0);m=length(x);ifn=pfprintf('Error!Pleaseinputagain!n');ifz<x0(1)|z>x0(n)f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論