文档详情

计算方法课程实验报告.doc

发布:2017-08-12约4.42千字共13页下载文档
文本预览下载声明
课 程 实 验 报 告 课程名称: 计算方法 专业班级: 信安1302班 学 号: U201315130 姓 名: 王超 指导教师: 付才 报告日期: 2015.5.2 计算机科学与技术学院 目录 实验一:Lagrange插值法 1 实验二:Newton插值法 4 实验三:复化梯形法 7 实验四:复化辛普森法 9 实验一:Lagrange插值法 1.1实验内容及要求 掌握Lagrange插值法的存在意义,推导过程,以及公式运用;通过编程实现Lagrange插值法的应用 1.2公式与算法描述 pn(x)= li(x)= 1.3程序流程图 见图1.1 图1.1 1.4程序清单 #includeiostream #includestring #includevector using namespace std; double lagrange(int n,vectordoublex,vectordoubley,double x); int main(){ char a=n; do{ coutn的值:endl; int n; cinn; vectordoublex(n,0); vectordoubley(n,0); cout请输入插值点对应的值及函数值(xi,yi):endl; for(int a=0;an;a++){ cinx[a]y[a]; } cout请输入要求值x的值:endl; double x; cinx; double result=lagrange(n,x,y,x); cout由拉格朗日插值法得出结果: resultendl; cout是否要继续?(y/n):; cina; }while(a==y); return 0; } double lagrange(int n,vectordoublex,vectordoubley,double x){ double result=0; for(int i=0;in;i++){ double temp=y[i]; for(int j=0;jn;j++){ if(i!=j){ temp = temp*(x-x[j]); temp = temp/(x[i]-x[j]); } } result += temp; } return result; }; 1.5运行结果 见图1.2 图1.2 1.6结果分析 结果与实验预期吻合,实验效果良好 1.7实验小结 通过这项实验,加深了对Lagrange插值法的理解,强化了对Lagrange插值法的运用 实验二:Newton插值法 2.1实验内容及要求 掌握Newton插值法的来源,推导过程,以及公式运用;通过编程实现Lagrange插值法的应用 2.2公式及算法描述 Nn(x)=f(x0)+f[x0,x1](x-x0)+…+f[x0,x1….,xn]wn(x) wn(x)=(x-x0)x-x1)..(x-xn-i) 2.3流程图 图2.0 2.4程序清单 #includestdio.h #define Max_N 20 //最大插值节点个数 float newton (float x[],float y[],float xx,int n) { int i,k; float Nt,f[Max_N], t[Max_N]; for(k=1;k=n;k++) // 计算差商 { for(i=k;i=n;i++) t[i]=(y[i]-y[i-1])/(x[i]-x[i-k]); f[k]=t[k]; for(i=k;i=n;i++) y[i]=t[i]; } Nt=f[n]; f[0]=y[0]; for(i=n-1;i=0;i--) // 计算牛顿插值多项式的值 Nt=Nt*(xx-x[i])+f[i]; return(Nt); } main() {float x[Max_N],y[Max_N];
显示全部
相似文档