数值分析实验报告(插值法)(教育教学)_第1页
数值分析实验报告(插值法)(教育教学)_第2页
数值分析实验报告(插值法)(教育教学)_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、学生学号 实验课成绩武汉理工大学学 生 实 验 报 告 书实验课程名称 数值分析 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 20102010学年 第一学期实验课程名称: 数值分析 实验项目名称实验成绩实验者专业班级组别同组者实验日期 年 月 日第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)1、 分别画出Lagrange插值公式、Newton插值公式、分段插值公式和Hermite插值公式的算法流程图2、 分别用Lagrange插值公式和Newton插值公式通过编程计算函数f(x)的近似值已知对于f(x)=ex,有数据表如下:xi00.5

2、1.02.0f(xi)1.000001.648722.718287.38906(1) 对x0=0,x1=0.5利用线性插值计算f(0.25)的近似值;对x0=0.5,x1=1利用线性插值计算f(0.75)的近似值;(2) 对x0=0,x1=0.5,x2=2利用二次插值计算f(0.25)和f(0.75)的近似值(3) 对x0=0,x1=0.5,x2=2求f(x)的Hermite插值多项式H5(x);(4) 分析和比较各插值算法的精度差异3、 通过编程计算函数f(x)的近似值。已知对于f(x)=,有数据表如下:xi2.02.12.22.32.4f(xi)1.4142141.4491381.4833

3、401.5165751.549193(1)计算各阶插值多项式在不同点的值:f(2.05),f(2.15),f(2.45);(2)利用分段线性插直和分段抛物插值计算(1)中的函数值;(3)分析和比较算法的效率差异和精度差异(同时注意插值点的位置与精度之间的关系)。4、用不同方式方法编程给出计算Langrange插值和Newton插值的算法,分析和比较两种算法的编程难易以及算法的效率差异总计算量之间的关系。5、写出实习报告二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)【拉格朗日插值法算法流程图】【牛顿插值法算法流程图】【分段插值法算法流程图】【艾尔

4、米特插值法算法流程图】【拉格朗日插值法源程序】#includeusing namespace std;int main() cout请输入坐标点个数:count; double point1002; int count1=0; cout请输入坐标:endl; while(count1pointcount10pointcount11; count1+; cout计算f(x)请输入x:x; double f=0,Lu=1; for(int i=0;icount;i+) for(int j=0;jcount;j+) if(j=i)continue; Lu=Lu*(x-pointj0)/(pointi

5、0-pointj0); Lu=Lu*pointi1; f=f+Lu; Lu=1; coutf(x)的值为:fendl; return 0;【牛顿插值法源程序】#includeusing namespace std;int main() cout请输入坐标点个数:count; double point1002; int count1=0; cout请输入坐标:endl; while(count1pointcount10pointcount11;count1+; cout计算f(x)请输入x:x; double d100; for(int i=0;icount;i+) di=pointi1; fo

6、r(int j=1;j=j;i-) di=(di-di-1)/(pointi0-pointi-j0); double f=d0,Lu=1,L; for(i=1;icount;i+) Lu=Lu*(x-pointi-10); L=Lu*di; f=f+L; coutf(x)的值为:fendl; return 0;【埃米尔特插值法源程序】#includeusing namespace std;struct pointdouble x;double y;double d;point100;int main() cout请输入坐标点个数:count; int count1=0; cout请依次输入坐标

7、的横纵坐标和对应的导数:endl; while(count1pointcount1.xpointcount1.ypointcount1.d; count1+; cout计算f(x)请输入x:x; double f=0,Lu=1,Laa=0,La,Lb; for(int i=0;icount;i+) for(int j=0;jcount;j+) if(j=i)continue; Lu=Lu*(x-pointj.x)/(pointi.x-pointj.x); Laa=Laa+1.0/(pointi.x-pointj.x); La=pointi.y*(1-2*(x-pointi.x)*Laa)*Lu

8、*Lu; Lb=pointi.d*(x-pointi.x)*Lu*Lu; f=f+La+Lb; Lu=1; Laa=0; coutf(x)的值为:fendl; return 0;三、主要仪器设备及耗材1PC机2开发环境(比如:VC,Eclipse)第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)用拉格朗日插值法计算时,输入及运行结果如下:拉格朗日插值法 牛顿插值法 (2)利用二次插值计算时,输入及运行结果如下:拉格朗日插值法 牛顿插值法 (3)用艾尔米特插值法计算时,f(x)的插值多项式H5(x)=(1+4*x)*

9、(x-0.5)*(x-0.5)*(x-2)*(x-2)+(3.90807-6.03838*x)*(x-2)*(x-2)*x*x+(2.34573-4.16674*x)*x*x*(x-0.5)*(x-0.5)(4)各插值算法的精度差异比较 经过比较,拉格朗日插值法要比牛顿插值法算法的计算量多一些,拉格朗日插值法后一次计算时用到了前一次计算的结果,提高了运算的效率,但拉格朗日插值法在构造艾尔米特插值法时很方便,将坐标点和对应的导数结合起来的精度比线性插值的精度又要高一些。但从实验数据来看,在坐标不是很多的情况下,已知的点越多精度也就相对较高。对于实验要求的第二组数据用拉格朗日插值法(或者牛顿插值法

10、)实验结果如下:一下分别是二阶、三阶、四阶、五阶插值得到的结果以上只是实验结果的一部分,改变插值的位置时,得到的实验结果精度也是有所不同的。由以上结果分析可知, 插值次数并不是越多越好,多了反而会让结果更加偏离真实结果,这 充分说明了高次插值存在“病态性质”,在已知点很多的情况下应该采用分段低次插值,将拉格朗日插值法和牛顿插值法运用到分段低次插值法当中,这样得到的结果可能胡更加精确。对于分段低次插值本实验没有给出实验结果,但从实践上来看,分段低次插值的精度要比线性插值精度高,但当插值阶数比较少的时候没有必要采用分段低次插值。二、 实验小结、建议及体会各种插值法都有自己的利与弊,拉格朗日插值法运算过程相对复杂,但当和导数结合起来,组成抛物插值的时候,精度就可以提高很多。牛顿插值法、拉格朗日插值

温馨提示

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

评论

0/150

提交评论