您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 计算机数值方法实验报告
2011级4班雷小慧(2011060115)计算机数值方法实验报告成绩册姓名:雷小慧学号:201106115成绩:实验编号实验名称实验学时实验成绩实验一Lagrange插值2实验二Newton插值2实验三分段插值2实验四龙贝格算法2实验五二分法求根2实验六牛顿迭代法求根2实验七Courant分解法2实验八R-K方法求解初值问题2数值计算方法与算法实验报告学期:2012至2013_第2学期时间:2013年5月22日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号:1实验项目:lagrange插值多项式指导教师_孙峪怀姓名:雷小慧学号:2011060115实验成绩:一、实验目的及要求实验目的:体会使用Lagrange插值基函数构造插值多项式的特点,熟悉使用一次或二次Lagrange插值多项式近似函数y=f(x)的算法。掌握Lagrange插值多项式近似函数f(x)的误差表达式,并会熟练应用。实验要求:1.给出一次、二次Lagrange插值算法2.用C语言实现算法二、实验内容用下列插值节点数据,构造一次和二次Lagrange插值多项式,并计算f(11.5),f(12.5)的值。(f(x)=sinx)x111213F(x)0.1908090.2079120.224951要求:所需数据都从键盘读入,最后输出结果.三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Lagrange插值多项式的算法:Step1输入:插值节点控制数n,插值点序列(xi,yi),i=0,1,……n,,要计算的函数点x.Step2fori=0ton/*控制Lagrange基函数序列*/{{forj=0ton/*对于给定x,计算Lagrange函数li(x)=ijnjxjxixjx0))/()((*/if(ji)li(x)=li(x)*(x-xj)/(xi-xj);}Ln(x)=Ln(x)+li(x)*yi/*计算Ln(x)=niyixli0)(*/}2.用C语言实现算法的程序代码#includestdio.h#defineMAX_N20/*定义点的最大个数为20*/typedefstructtagPOINT/*对点的结构化定义,一个点包括x和y*/{doublex;doubley;}POINT;intmain(void){intn;/*n表示输入的点的个数,大于0小于20*/inti,j,k;POINTpoints[MAX_N+1];doublex,temp,Lagrange=0;clrscr();printf(\nPleaseinputnvalue:);scanf(%d,&n);if(nMAX_N){printf(TheinputnislargerthanMAX_N,pleaseredfinetheMAX_N.\n);return1;}if(n=0){printf(Pleaseinputanumberbetween1and%d.\n,MAX_N);return1;}printf(Nowinputthe(x_i,y_i),i=0,...,%d:\n,n);/*输入每个点的x和y*/for(i=0;in;i++){scanf(%lf,%lf,&points[i].x,&points[i].y);}printf(Nowinputthexvalue:);/*输入要求的x值*/scanf(%lf,&x);for(k=0;kn;k++){temp=1;for(j=0;jn;j++){if(k!=j){temp=temp*(x-points[j].x)/(points[k].x-points[j].x);}}Lagrange=Lagrange+temp*points[k].y;}printf(Lagrange(%lf)=%lf\n,x,Lagrange);/*输出结果*/return0;}3.在TC环境中运行如下:4.运行结果:F(11.5)的结果是:F(12.5)的结果是:数值计算方法与算法实验报告学期:2012至2013_第2学期时间:2013年5月22日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号:2实验项目:Newton插值多项式指导教师__孙峪怀姓名:雷小慧学号:2011060115实验成绩:一、实验目的及要求实验目的:掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。实验要求:1.给出Newton插值算法2.用C语言实现算法二、实验内容1.用下列插值节点数据,构造Newton插值多项式,并计算N2(0.9),N3(0.9)的值。x-2012f(x)171219要求:所需数据都从键盘读入,最后输出结果.2.用下列插值节点数据,构造一个三次Newton插值多项式,并计算f(1.2)的值。x-1.002.003.004.00f(x)3.005.007.005.00三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Lagrange插值多项式的算法:Step1输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x.Step2形成差商表fori=0tonforj=ntoif(j)=((f(j)-f(j-1)/(x(j)-x(j-1-i));Step3置初始值temp=1,newton=f(0)Step4fori=1tontemp=(x-x(i-1))*temp/*由temp(k)=(x-x(k-1))*temp(k-1)形成(x-x(0).....(x-x(i-1)*/Newton=newton+temp*f(i);Step5输出f(x)的近似数值newton(x)=newton.5.用C语言实现算法的程序代码#includestdio.h#defineMAX_N20/*点的最大个数为20*/typedefstructtagPOINT/*结构化定义点包括x和y*/{doublex;doubley;}POINT;intmain(void){intn,n1,i,j;POINTpoints[MAX_N+1];doublex,tmp,newton=0;clrscr();printf(\nPleaseinputnvalue:);scanf(%d,&n);printf(\nPleaseinputthetimeofnewton:);/*输入牛顿插值的阶数*/scanf(%d,&n1);if(nMAX_N){printf(TheinputnislargerthanMAX_N,pleaseredefinetheMAX_N.\n);return1;}if(n=0){printf(Pleaseinputanumberbetween1and%d.\n,MAX_N);return1;}printf(Nowinputthe(xi,yi),i=0,...,%d:\n,n);for(i=0;in;i++){scanf(%lf,%lf,&points[i].x,&points[i].y);}printf(Nowinputthexvalue:);scanf(%lf,&x);for(i=0;in;i++){for(j=n-1;ji;j--){points[j].y=((points[j].y-points[j-1].y)/(points[j].x-points[j-1-i].x));}}tmp=1;newton=points[0].y;for(i=0;in1;i++){tmp=tmp*(x-points[i].x);newton=newton+tmp*points[i+1].y;}printf(newton(%lf)=%lf\n,x,newton);return0;}6.在TC环境中运行如下:7.运行结果1.N2(0.9)的运行结果是:N3(0.9)的运行结果是:2.f(1.2)的运行结果是:数值计算方法与算法实验报告学期:2012至2013_第2学期时间:2013年5月22日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号:3实验项目:分段插值多项式指导教师__孙峪怀姓名:雷小慧学号:2011060115实验成绩:一、实验目的及要求实验目的:1.体会分段低次插值在不增加结点的情况下,提高插值精度的思想和这种用低代价换取高回报的手段。2.熟练掌握分段一次、分段二次插值多项式公式;3.掌握分段插值多项式算法设计的特点。实验要求:1.给出分段一次、二次插值算法;2.用C语言实现算法二、实验内容用下列插值节点数据,构造分段线性插值多项式,并计算f(1.075),f(1.175)的值。x1.051.101.151.20F(x)2.122.202.172.32三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述分段插值多项式的算法:Step1输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x.Step2将输入的插值点x与每一个点对应的x作比较,比较出比它大的时完成。fori=0tonif(xpoints[i].x){a=points[i-1].x;f1=points[i-1].y;b=points[i].x;f2=points[i].y;break;}Step3输出值2.用C语言实现算法的程序代码#includestdio.h#defineMAX_N20/*定义的点的最大个数为20*/typedefstructtagPOINT/*结构化定义点,包括x和y*/{doublex;doubley;}POINT;intmain(void){intn,i,j;POINTpoints[MAX_N+1];doublex,a,b,P,f1,f2;clrscr();printf(Pleaseinputnvalue:\n);scanf(%d,&n);if(nMAX_N){printf(TheinputnislargerthanMAX_N,pleaseredefinetheMAX_N.\n);return1;}if(n=0){printf(Pleaseinputanumberbetween1and%d.\n,MAX_N);return1;}printf(Nowinputthe(xi,yi),i=0,...,%d:\n,n);for(i=0;in;i++){scanf(%lf,%lf,&points[i].x,&points[i].y);}printf(Nowinputthexvalue:);scanf(%lf,&x);if(xpoints[0].x||xpoints[n-1].x)/*如果x比第一个点的x小或x比最后一个点的x大时*/{printf(Inputxvalueerror!);exit(0);}for(i=0;in;i++)/*记录下插值区间的左端点和右端点*/{if(xpoints[i].x){b=points[i].x;f2=points[i].y;a=points[i-1].x;f1=points[i-1].y;break;}}P=((x-b)/(a-b))*f1+((x-a)/(b-a))*f2;/*插值函数*/printf(\nShowtheresult:%f,P);}3.用C语在TC环境中运行如下:3.运行结果f(1.075)的运行结果是:f(1.175)的运行结果是:数值计算方法与算法实验报告学期:2012至2013_第2学期时间:2013年5月29日课程名称:_数值计算方法与算法专业:数学与应用数学班级:2011级4班实验编号:4实验项目:romberg算法指导教师__孙峪怀姓名:雷小慧学号:2011060115实验成绩:一、实验目的及要求实验目的:熟练掌握数值积分的基本思想和动手推导积分公式的能力,并写出自己设计的变步长算法,用此算法解决实际问题。
本文标题:计算机数值方法实验报告
链接地址:https://www.777doc.com/doc-5051446 .html