《实验一-插值方法实验》由会员分享,可在线阅读,更多相关《实验一-插值方法实验(10页珍藏版)》请在金锄头文库上搜索。
1、计算方法实验报告学 院: 信息学院 专 业: 计算机科学与技术 指导教师: 班级学号: 姓 名: 计算机科学与工程系实验一 插值方法一. 实验目的(1)熟悉数值插值方法的基本思想,解决某些实际插值问题,加深对数值插值方法的理解。(2)熟悉Matlab编程环境,利用Matlab实现具体的插值算法,并进行可视化显示。二. 实验要求 用Matlab软件实现Lagrange插值、分段线性插值、三次Hermite插值、Aitken逐步插值算法,并用实例在计算机上计算和作图。三. 实验内容1. 实验题目 i0123x0.460470.480.49y0.0.0.0.(1)已知概率积分的数据表构造适合该数据表
2、的一次、二次和三次Lagrange插值公式,输出公式及其图形,并计算x=0.472时的积分值。(2)将区间-5,5分为10等份,求作的分段线性插值函数,输出函数表达式及其图形,并计算x=3.3152时的函数值。(3)仿照附录C中“文件1.2 逐步插值”程序(Neville算法,课本227页)编写相应的Aitken逐步插值算法的程序,根据下表所给数据分别利用上述两种算法求正弦积分在x=0.462的值,并比较它们的结果。x0.30.40.50.60.7y0.298500.396460.493110.588130.68122(4)运行C中“文件1.3 分段三次Hermite插值”程序(课本228页)
3、,要求自行选择实验数据2. 设计思想 (1)Lagrange插值:Lagrange具有累加的嵌套结构,容易编制其计算程序。事实上,在逻辑上表现为二重循环,内循环(j循环)累乘求得系数,然后再通过外循环(i循环)累加得出插值结果y。(2)分段线性插值:分段插值是将被插值函数逐步多项式化。分段插值的处理过程分两步,将区间分成几个子段,并在每个子段上构造插值多项式装配在一起,作为整个区间的插值函数。在分化的每个节点给出数据,连接相邻节点得一折线,该折线函数可以视作插值问题的解。(3)Neville插值:Neville插值的基本思想和Aitken插值一样,不同的是Neville插值每次选取的两个插值节
4、点都是上一步相邻节点插值后得到的,而不是新的插值节点,这样得到的插值函数和原函数更加接近。 Atiken逐步插值:Aitken插值是对三步插值转化为两步插值的重复,先将前两个插值点插值生成新的数据,然后与第三个插值点进行新的两点插值,不断重复这个插值过程,每一步增加一个新的节点,直到遍历所有节点为止,最终获得与原函数更加接近的插值函数。(4)Hermite插值:Hermite插值是Lagrange插值的综合与推广,为了保证插值函数能更好地密合原来的函数,要求“过点”,即两者在节点上有相同的函数值,而且要求“相切”,即在节点上还具有相同的导数值。3. 对应程序(1)Lagrange插值funct
5、ion y0,N=Lagrange_eval(X,Y,x0)%X,Y是已知的差值点坐标点%x0是插值点%y0是Lagrange多项式在x0处的值%N是Lagrange插值函数的权系数m=length(X);N=zeros(m,1);y0=0;for i=1:m N(i)=1; for j=1:m if j=i N(i)=N(i)*(x0-X(j)/(X(i)-X(j); end end y0=y0+Y(i)*N(i);end(2)分段插值syms f x;f=1/(1+x2); N=input(请输入插值节点数N=);X=-5:10/N:5; Y=zeros(1,length(X);for i
6、=1:(N+1) x=X(i); Y(i)=eval(f);endM = -5:0.01:5;y = zeros(1,length(M); n=1;for i=1:N for x=-5:0.01:5 if x=X(i) y(n)=Y(i)*(x-X(i+1)/(X(i)-X(i+1)+Y(i+1)*(x-X(i)/(X(i+1)-X(i); n=n+1; end endendezplot(f,-5,5) hold on x =-5:0.01:5;plot(x,y,r); (3)Neville逐步插值function y0=Neville_eval(X,Y,x0)%X,Y是已知的插值点的坐标%x
7、0是插值点%y0是多项式在x0处的值m=length(X);P=zeros(m,1);P1=zeros(m,1);P=Y;for i=1:m P1=P; k=1; for j=i+1:m k=k+1; P(j)=P1(j-1)+(P1(j)-P1(j-1)*(x0-X(k-1)/(X(j)-X(k-1); end if abs(P(m)-P(m-1)10-6; y0=P(m); return; endendy0=P(m);Atiken逐步插值 function y0=Aitken_eval(X,Y,x0)%X,Y是已知的插值点的坐标%x0是插值点%y0是多项式在x0处的值m=length(X)
8、;P=zeros(m,1);P1=zeros(m,1);P=Y;for i=1:m P1=P; k=1; for j=i+1:m k=k+1; P(j)=P1(j-1)+(P1(j)-P1(1)*(x0-X(k-1)/(X(j)-X(1); end if abs(P(m)-P(m-1)=X(i)&x0 X=0.46,0.47; Y=0.,0.; x0=0.472; y0,N=Lagrange_eval(X,Y,x0)y0 = 0.000N = -0.000 1.000插值系数与作图: x1=0; y1,N=Lagrange_eval(X,Y,x1); x2=1; y2,N=Lagrange_e
9、val(X,Y,x2); k=(y2-y1)/(x2-x1)k = 0.001 x=x1,x2; y=y1,y2; plot(x,y)二次Lagrange插值差值结果: X=0.46,0.47,0.48; Y=0.,0.,0.; x0=0.472; y0,N=Lagrange_eval(X,Y,x0)y0 = 0.000N = -0.000 0.000 0.000插值系数与作图: x1=0; y1,N=Lagrange_eval(X,Y,x1); x2=1; y2,N=Lagrange_eval(X,Y,x2); k=(y2-y1)/(x2-x1)k = 0.967 x=x1,x2; y=y1
10、,y2; plot(x,y)三次Lagrange插值差值结果: X=0.46,0.47,0.48,0.49; Y=0.,0.,0.,0.; x0=0.472; y0,N=Lagrange_1(X,Y,x0) y0,N=Lagrange_eval(X,Y,x0)y0 = 0.000N = -0.000 0.000 0.000 -0.000插值系数与作图 x1=0; y1,N=Lagrange_eval(X,Y,x1); x2=1; y2,N=Lagrange_eval(X,Y,x2); k=(y2-y1)/(x2-x1)k = 0.011 x=x1,x2; y=y1,y2; plot(x,y)(
11、2) 分段差值差值结果: Y=interp1(x,y,3.3152,spline)Y = 0.731作图:(原函数:蓝色,插值函数:红色) fenduan_eval请输入插值节点数N=6(3) Neville逐步插值 X=0.3,0.4,0.5,0.6,0.7; Y=0.29850,0.39646,0.49311,0.58813,0.68122; x0=0.462; y0=Neville_eval(X,Y,x0)y0 = 0.280Aitken逐步插值 X=0.3,0.4,0.5,0.6,0.7; Y=0.29850,0.39646,0.49311,0.58813,0.68122; x0=0.462; y0=Aitken_eval(X,Y,x0)y0 = 0.945(4) 分段三次Hermite插值 X=0.3,0.4,0.5,0.6,0.7;