实验一-插值方法实验_第1页
实验一-插值方法实验_第2页
实验一-插值方法实验_第3页
实验一-插值方法实验_第4页
实验一-插值方法实验_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《计算方法》实验报告学院:信息学院专业:计算机科学与技术指导教师:班级学号:姓名:计算机科学与工程系实验一插值方法一.实验目的〔1〕熟悉数值插值方法的根本思想,解决某些实际插值问题,加深对数值插值方法的理解。〔2〕熟悉Matlab编程环境,利用Matlab实现具体的插值算法,并进行可视化显示。二.实验要求用Matlab软件实现Lagrange插值、分段线性插值、三次Hermite插值、Aitken逐步插值算法,并用实例在计算机上计算和作图。实验内容1.实验题目i0123x0.460470.480.49y0.48465550.49374520.50274980.5116683〔1〕概率积分的数据表

构造适合该数据表的一次、二次和三次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页〕,要求自行选择实验数据2.设计思想〔1〕Lagrange插值:Lagrange具有累加的嵌套结构,容易编制其计算程序。事实上,在逻辑上表现为二重循环,内循环〔j循环〕累乘求得系数,然后再通过外循环〔i循环〕累加得出插值结果y。〔2〕分段线性插值:分段插值是将被插值函数逐步多项式化。分段插值的处理过程分两步,将区间分成几个子段,并在每个子段上构造插值多项式装配在一起,作为整个区间的插值函数。在分化的每个节点给出数据,连接相邻节点得一折线,该折线函数可以视作插值问题的解。〔3〕Neville插值:Neville插值的根本思想和Aitken插值一样,不同的是Neville插值每次选取的两个插值节点都是上一步相邻节点插值后得到的,而不是新的插值节点,这样得到的插值函数和原函数更加接近。Atiken逐步插值:Aitken插值是对三步插值转化为两步插值的重复,先将前两个插值点插值生成新的数据,然后与第三个插值点进行新的两点插值,不断重复这个插值过程,每一步增加一个新的节点,直到遍历所有节点为止,最终获得与原函数更加接近的插值函数。〔4〕Hermite插值:Hermite插值是Lagrange插值的综合与推广,,为了保证插值函数能更好地密合原来的函数,要求“过点〞,即两者在节点上有相同的函数值,而且要求“相切〞,即在节点上还具有相同的导数值。3.对应程序〔1〕Lagrange插值function[y0,N]=Lagrange_eval(X,Y,x0)%X,Y是的差值点坐标点%x0是插值点%y0是Lagrange多项式在x0处的值%N是Lagrange插值函数的权系数m=length(X);N=zeros(m,1);y0=0;fori=1:mN(i)=1;forj=1:mifj~=iN(i)=N(i)*(x0-X(j))/(X(i)-X(j));endendy0=y0+Y(i)*N(i);end〔2〕分段插值symsfx;f=1/(1+x^2);N=input('请输入插值节点数N=');X=-5:10/N:5;Y=zeros(1,length(X));fori=1:(N+1) x=X(i); Y(i)=eval(f);endM=-5:0.01:5;y=zeros(1,length(M));n=1;fori=1:N forx=-5:0.01:5 ifx<X(i+1)&&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])holdonx=-5:0.01:5;plot(x,y,'r');〔3〕Neville逐步插值functiony0=Neville_eval(X,Y,x0)%X,Y是的插值点的坐标%x0是插值点%y0是多项式在x0处的值m=length(X);P=zeros(m,1);P1=zeros(m,1);P=Y;fori=1:mP1=P;k=1;forj=i+1:mk=k+1;P(j)=P1(j-1)+(P1(j)-P1(j-1))*(x0-X(k-1))/(X(j)-X(k-1));endifabs(P(m)-P(m-1))<10^-6;y0=P(m);return;endendy0=P(m);Atiken逐步插值functiony0=Aitken_eval(X,Y,x0)%X,Y是的插值点的坐标%x0是插值点%y0是多项式在x0处的值m=length(X);P=zeros(m,1);P1=zeros(m,1);P=Y;fori=1:mP1=P;k=1;forj=i+1:mk=k+1;P(j)=P1(j-1)+(P1(j)-P1(1))*(x0-X(k-1))/(X(j)-X(1));endifabs(P(m)-P(m-1))<10^-6;y0=P(m);return;endendy0=P(m);〔4〕Hermite插值functiony0=Hermite_interp(X,Y,DY,x0)%X,Y是插值点向量序列%DY是插值点处的导数值%x0是插值点横坐标%y0是待求的分段三次Hemite插值多项式在x0处的值%N表示向量长度N=length(X);fori=1:Nifx0>=X(i)&x0<=X(i+1)k=i;break;endenda1=x0-X(k+1);a2=x0-X(k);a3=X(k)-X(k+1);y0=(a1/a3)^2*(1-2*a2/a3)*Y(k)+(-a2/a3)^2*(1+2*a1/a3)*Y(k+1)+(a1/a3)^2*a2*DY(k)+(-a2/a3)^2*a1*DY(k+1);4.实验结果列出相应的运行结果。如果要求可视化,那么同时需要给出相应的图形。Lagrange插值一次Lagrange插值:运行结果:>>X=[0.46,0.47];>>Y=[0.4846555,0.4937452];>>x0=0.472;>>[y0,N]=Lagrange_eval(X,Y,x0)y0=0.49556314000000N=-0.200000000000001.20000000000000插值系数与作图:>>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.90897000000001>>x=[x1,x2];>>y=[y1,y2];>>plot(x,y)二次Lagrange插值差值结果:>>X=[0.46,0.47,0.48];>>Y=[0.4846555,0.4937452,0.5027498];>>x0=0.472;>>[y0,N]=Lagrange_eval(X,Y,x0)y0=0.49555292800000N=-0.080000000000000.96000000000000插值系数与作图:>>x1=0;>>[y1,N]=Lagrange_eval(X,Y,x1);>>x2=1;>>[y2,N]=Lagrange_eval(X,Y,x2);>>k=(y2-y1)/(x2-x1)k=>>x=[x1,x2];>>y=[y1,y2];>>plot(x,y)三次Lagrange插值差值结果:>>X=[0.46,0.47,0.48,0.49];>>Y=[0.4846555,0.4937452,0.5027498,0.5116683];>>x0=0.472;>>[y0,N]=Lagrange_1(X,Y,x0)>>[y0,N]=Lagrange_eval(X,Y,x0)y0=0.49555296000000N=-0.048000000000000.86400000000000-0.03200000000000插值系数与作图>>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.83708499999011>>x=[x1,x2];>>y=[y1,y2];>>plot(x,y)分段差值差值结果:>>Y=interp1(x,y,3.3152,'spline')Y=0.08342312935731作图:〔原函数:蓝色,插值函数:红色〕>>fenduan_eval请输入插值节点数N=6Neville逐步插值>>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.45655811276280Aitken逐步插值>>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.77480886915945〔4〕分段三次Hermite插值>>X=[0.3,0.4,0.5,0.6,0.7];>>Y=log(X);>>DY=1./X;>>x0=0.462;>>y0=Hermite_interp(X,Y,DY,x0)y0=-0.7722实验体会通过本次课程设计,我初步掌握了MATLAB运用,了解了matlab的根本编程思想,学会了matlab的根本语法与常用操作命令,加深了对于Lagrange插值、分段线性插值、Neville逐步插值、Aitken逐步插值、Hermite插值的理解;培养了独立工作能力和创造力;更加精进了编程的能力;综合运用专业及根底知识,解决实际数学问题的能力;深入的了解和体会了计算方法—算法设计及其matlab实现的根本原理与学习思路;在本次课程设计中,在老师的精心指导下,收益匪浅。同时对数学的研究有了更深入的认识,并对以往所掌握的数学及编程知识有了回忆及更深入的探索。对于各种插值方法的精度分析也有了清晰的认识,并对各种插值算法有了深刻的的理解;Lagrange插值在高次插值时同原函数插值偏差大,拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。且当增大插值阶数时容易出现龙格现象。分段线性插值是将整个区间分成许多小段,运用低次插值,从而提高精度。分段线性插值算法简单,计算量小,但精度不高。Neville插值的根本思想和Aitken插值一样,不同的是Neville插值每次选取的两个插

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论