資源描述:
《拉格朗日插值.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、拉格朗日插值繪制龍格現(xiàn)象一、問題敘述龍格反例1/(1+x^2)說明高次代數(shù)插值會導(dǎo)致誤差很大。在區(qū)間[-5,5]上取等距結(jié)點構(gòu)造10次拉格朗日插值多項式用計算機繪制圖形顯示龍格現(xiàn)象。二、理論分析1.拉格朗日插值:假設(shè)有(n+1)個拉格朗日插值結(jié)點,已知函數(shù)值求n次多項式使其滿足插值條件類似于二次插值方法,根據(jù)插值結(jié)點構(gòu)造(n+1)個拉格朗日插值基函數(shù)每一個基函數(shù)都是零點多項式滿足插值條件拉格朗日插值基函數(shù):拉格朗日插值多項式:2.切比雪夫插值:n階切比雪夫多項式定義為若令,則有。由余弦函數(shù)性質(zhì),有所以有遞推關(guān)系,又
2、有,所以n階切比雪夫多項式零點為。3.Hermite插值如果f(x)在區(qū)間[a,b]上連續(xù)可導(dǎo),是互異的,那么存在唯一的多項式滿足多項式在這些點上的值與函數(shù)f(x)的值相等、多項式在這些點的一階導(dǎo)數(shù)值與函數(shù)的一階導(dǎo)數(shù)值相等。這個多項式可以表示為其中三、算法MATLAB實現(xiàn)(1)拉格朗日插值描繪龍格現(xiàn)象,代碼如下:functionf=Language(x,y,x0)symstl;if(length(x)==length(y))n=length(x);elsedisp('x和y維數(shù)不相等');return;endh=s
3、ym(0);for(i=1:n)l=sym(y(i));for(j=1:i-1)l=l(t-x(j))/(x(i)-x(j));end;for(j=i+1:n)l=l(t-x(j))/(x(i)-x(j));end;h=h+l;endsimplify(h);if(nargin==3)f=subs(h,'t',x0);elsef=collect(h);f=vpa(f,6);end主程序x1=-5:1:5;x2=-5:2:5;x3=-5:2/3:5;y11=1./(1+x1.^2);%10次拉格朗日插值y12=1./(
4、1+x2.^2);%5次拉格朗日插值y13=1./(1+x3.^2);%15次拉格朗日插值x0=-5:0.001:5;%調(diào)用拉格朗日函數(shù)y1=Language(x1,y11,x0);y2=Language(x2,y12,x0);y3=Language(x3,y13,x0);y0=1./(1+x0.^2);plot(x0,y0);holdonplot(x0,y2,'r');holdonplot(x0,y1,'k');holdonplot(x0,y3,'g');holdonxlabel('x');ylabel('y')
5、;title('原函數(shù)f(x)=1/(1+x^2)等距拉格朗日插值');legend('原函數(shù)','5次拉格朗日插值','10次拉格朗日插值','15次拉格朗日插值');gridon插值效果如下:圖1等距拉格朗日插值圖1分別進行5次、10次、15次拉格朗日插值,可以看出5次插值擬合效果不是很好,10次插值在插值區(qū)間的邊界處出現(xiàn)很大波動,明顯偏離原函數(shù),15次插值看到波動情況加強,故得出結(jié)論:拉格朗日插值次數(shù)不宜過高。高次插值邊界出現(xiàn)這種波動現(xiàn)象叫做龍格現(xiàn)象。為避免上述現(xiàn)象,分別采用切比雪夫插值,埃米特插值和樣條插值
6、來避免龍格現(xiàn)象(2)切比雪夫插值:用切比雪夫多項式零點代替等距結(jié)點,其他基本不變x1=-5:1:5;y11=1./(1+x1.^2);x0=-5:0.001:5;y1=Language(x1,y11,x0);y0=1./(1+x0.^2);k=0:1:10;xx=5cos((2k+1)pi/22);%用切比雪夫多項式零點代替等距結(jié)點yy=1./(1+xx.^2);y4=Language(xx,yy,x0);plot(x0,y0,'k');holdonplot(x0,y1,'r');holdonplot(x0,y4,
7、'b',xx,yy,'ob');插值效果如下:圖2切比雪夫插值由圖2可以看出10次切比雪夫插值很好的和原函數(shù)擬合,并且波動較小,說明偽振蕩現(xiàn)象得到控制。(3)樣條插值:樣條插值直接采用MATLAB插值函數(shù)spline(),代碼如下:x=-5:1:5;y=1./(1+x.^2);xx=-5:0.01:5;yy=spline(x,y,xx);%使用樣條插值方法x0=-5:0.001:5;y0=1./(1+x0.^2);plot(x,y,'ok',xx,yy,'r',x0,y0,'b');插值效果如下:圖3樣條插值由圖3
8、可以看出樣條插值擬合效果最好,與原函數(shù)基本一致,但樣條插值處理1/(1+25x^2)函數(shù)時,還是有波動的,故不能完全說明樣條是最好的插值方式(4)Hermite插值:根據(jù)埃米特插值表達(dá)式寫出代碼如下:functionyy=Hermite(x,y,dy,xx)n=length(y);m=length(x);l=length(dy);k=length(xx);i