《数值分析实验报告--Runge现象的产生和克服(共8页).docx》由会员分享,可在线阅读,更多相关《数值分析实验报告--Runge现象的产生和克服(共8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 数值分析实验报告(四)题目:Runge现象的产生和克服 学院:机电工程学院(二专业) 专业:机械设计制造及其自动化 班级:班 姓名:张洪进 学号:号 Runge现象的产生和克服摘要:对于多项式插值运算,随着插值阶数的逐渐增多,如果带入离散点过于密集,使得定义域中的“边缘区域”,没有有效的点,将导致插值函数的边缘区域大幅度的偏离函数的真值,该现象称之为“Runge现象”。0 前言(目的与意义):了解Runge现象,体会插值运算的不准确性,以及其差值带来的误差甚至是错误。1 数学背景:插值运算的误差公式: |Rn (x)| Mn+1n+1!|wn (x)| Mn+1=m
2、axf(n+1)(xi) 于是,如果函数的n+1阶导数一旦很大,则会出现函数的误差很大的情况。 2 程序及代码:(1)lagrange多项式插值函数syms f x p dp lx L;f=1/(1+25*x2);N=input(请输入插值节点数N=);xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx);for i=1:(N+1) x=xx(i); ff(i)=eval(f); syms x; p=p*(x-xx(i);enddp=diff(p);for j=1:(N+1) x=xx(j); k=eval(dp); syms x; lx=p/(x-xx(j)*
3、k); L=L+lx*ff(j);endaa=-0.96:0.1:-0.06,0,0.06:0.1:0.96;for i=1:length(aa) x=aa(i); S(i)=eval(L); fff(i)=eval(f);ende=0;for i=1:length(aa) e=e+(S(i)-fff(i)2;ende=sqrt(e/(20*21);fprintf(插值偏差为e=%.6fn,e)ezplot(f,-1,1)hold onezplot(L,-1,1)hold onplot(xx,ff,*)hold onplot(aa,S,o)hold off(2)分段线性插值函数syms f x
4、 p lx;f=1/(1+25*x2);N=input(请输入插值节点数N=);xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx);for i=1:(N+1) x=xx(i); ff(i)=eval(f);endsyms xfor i=1:N for j=1:(N+1) if j=i lx(i,j)=(x-xx(i+1)/(xx(i)-xx(i+1); else if j=i+1 lx(i,j)=(x-xx(i)/(xx(i+1)-xx(i); else lx(i,j)=0; end end endendp=lx*ff;aa=-0.96:0.1:-0.06,0
5、,0.06:0.1:0.96;for i=1:length(aa) x=aa(i); for j=1:N+1 if xxx(j) break end end S(i)=eval(p(j-1); fff(i)=eval(f);ende=0;for i=1:length(aa) e=e+(S(i)-fff(i)2;ende=sqrt(e/(20*21);fprintf(插值偏差为e=%.6fn,e)ezplot(f,-1,1)hold onxxx=(-1:0.01:1);for i=1:length(xxx) x=xxx(i); for j=1:N+1 if xxx(j) break end en
6、d SS(i)=eval(p(j-1);endplot(xxx,SS,r)hold onplot(xx,ff,*)hold onplot(aa,S,o)hold off(3):三转角插值法函数syms f x df s s1 s2 s3 s4;f=1/(1+25*x2);df=diff(f);N=input(请输入插值节点数N=);h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx);for i=1:(N+1) x=xx(i); ff(i)=eval(f); dff(i)=eval(df);endsyms xfor i=1:N s1=(x-xx(i+
7、1)2*(h+2*(x-xx(i)*ff(i)/h3; s2=(x-xx(i)2*(h+2*(xx(i+1)-x)*ff(i+1)/h3; s3=(x-xx(i+1)2*(x-xx(i)*dff(i)/h2; s4=(x-xx(i)2*(x-xx(i+1)*dff(i+1)/h2; s(i)=s1+s2+s3+s4;endaa=-0.96:0.1:-0.06,0,0.06:0.1:0.96;for i=1:length(aa) x=aa(i); for j=1:N+1 if xxx(j) break end end S(i)=eval(s(j-1); fff(i)=eval(f);ende=0
8、;for i=1:length(aa) e=e+(S(i)-fff(i)2;ende=sqrt(e/(20*21);fprintf(插值偏差为e=%.6fn,e)ezplot(f,-1,1)hold onxxx=(-1:0.01:1);for i=1:length(xxx) x=xxx(i); for j=1:N+1 if xxx(j) break end end SS(i)=eval(s(j-1);endplot(xxx,SS,r)hold onplot(xx,ff,*)hold onplot(aa,S,o)hold off(4).三弯矩插值法函数:syms f x ddf s;f=1/(1
9、+25*x2);ddf=diff(diff(f);N=input(请输入插值节点数N=);h=2/N;xx=-1:2/N:1;p=1; L=0;ff=zeros(1,length(xx);for i=1:(N+1) x=xx(i); ff(i)=eval(f); ddff(i)=eval(ddf);endsyms xfor i=1:N A=(ff(i+1)-ff(i)/h-h*(ddff(i+1)-ddff(i)/6; B=ff(i)-h2*ddff(i)/6; s(i)=(xx(i+1)-x)3*ddff(i)/(6*h)+(x-xx(i)3*ddff(i+1)/(6*h)+A*(x-xx(
10、i)+B;endaa=-0.96:0.1:-0.06,0,0.06:0.1:0.96;for i=1:length(aa) x=aa(i); for j=1:N+1 if xxx(j) break end end S(i)=eval(s(j-1); fff(i)=eval(f);ende=0;for i=1:length(aa) e=e+(S(i)-fff(i)2;ende=sqrt(e/(20*21);fprintf(插值偏差为e=%.6fn,e)ezplot(f,-1,1)hold onxxx=(-1:0.01:1);for i=1:length(xxx) x=xxx(i); for j=1:N+1 if xxx(j) break end end SS(i)=eval(s(j-1);endplot(xxx,SS,r)hold onplot(xx,ff,*)hold onplot(aa,S,o)hold off3 总结与评价:函数的Runge现象可以通过三转角插值和三弯矩插值来解决,而且对于三转角和三弯矩插值来说,带入的数据越多,其插值效果越好4 实验结果:图1:观察Runge现象图2:分段线性插值图3:三转角插值:图4:三弯矩插值: 专心-专注-专业