数值实验报告_第1页
数值实验报告_第2页
数值实验报告_第3页
数值实验报告_第4页
数值实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、北京XX大学 计算机与通信工程学院实 验 报 告实验名称: 数值计算方法课程实验 学生姓名:_XX_专 业:_计算机科学与技术_班 级:_XXXX_学 号:_XXXXXX_指导教师:_XXXXX_实验成绩:_实验地点:_XXXXXXX_实验时间:_2017_年_6_月_6_日一、实验目的与实验要求1、实验目的实验1:探究非线性方程的解法,比较不同解法的优劣性,针对具体问题对解法进行实践,并迭代达到指定的精确度。实验2:探究一般化曲线拟合的方法,采用最小二乘法对含有多项式,指数和对数多种形式的函数进行拟合,确定拟合结果中的系数。实验3:探究多种积分的数值解法,根据给定的精度,选择恰当的数值积分方

2、法,确定迭代步数与步长,分析积分数值解法的优劣性。2、实验要求实验1:采用两种算法求解非线性方程,比较两种算法的性能。实验2:用最小二乘法拟合由不超过三阶多项式和指数、对数函数线性组合成的符合函数,确定各个项的系数实验3:自选一种数值积分方法求解积分值,根据要求的精度给出最终的迭代步数和步长,分析优缺点。二、实验设备(环境)及要求实验1,3采用C语言编写,编译环境为DEV C+。实验2涉及矩阵操作,故采用MATLAB编写。三、实验内容与步骤1、实验1(1)实验内容·采用至少两种不同的算法求解ex+3*x3-x2-2=0在0,1范围内的一个根,要求两次迭代误差小于10-4。·

3、根据实验结果,比较分析不同算法的性能。(2)主要步骤本实验由C语言实现。在两种不同的算法上选用简单迭代法和牛顿迭代法。简单迭代法是将方程化成一个与原方程同解的方程,方程一端化成自变量x,然后判断迭代函数是否收敛,如果收敛的话,不停地迭代将使x趋于一个定值,这个定值就是原方程的近似解。而牛顿迭代法是直接给出形如xk+1=xk-f(xk)f(xk)的迭代函数进行迭代,如果满足两个端点异号,f(x)在a,b上不等于零,f(x)在a,b上不变号且初值x0满足条件f(x0) f(x0)0,则由牛顿迭代法产生的序列单调收敛于a,b内的唯一根。两种算法在理论上,牛顿迭代法的收敛速度要大于简单迭代法,以下进行

4、迭代解非线性方程组并验证收敛速度的差异。1.简单迭代法:将x3移项,整理,得到迭代函数如下:x=3-ex+x2+23,选取收敛的初值点x0=0。在实现上利用for循环进行迭代,直到相邻两次的误差小于10-4。C语言代码如下:简单迭代函数:float SimpleIteration(float x) /简单迭代 return pow (x*x+2-exp(x)/3.0,1.0/3); /pow (double x,double y);函数为求x的y次方 主函数中简单迭代法部分: a0=SimpleIteration(0); /简单迭代法 printf("简单迭代法:n");

5、printf("迭代值tt相邻两次误差n"); printf("%fn",a0); for(i=1;i+) ai=SimpleIteration(ai-1); d1=fabs(ai-ai-1); printf("%ft%fn",ai,d1); if(d1<1e-4) break; 2.牛顿迭代法:根据牛顿迭代法迭代函数的一般形式可以得到具体的迭代函数如下:x-ex+3x3-x2-2ex+9x2-2x,选取与简单迭代法相同的初值x0=0。C语言代码如下:牛顿迭代函数:float NewtonIteration(float x) /

6、牛顿迭代 return x-(exp(x)+3*x*x*x-x*x-2)/(exp(x)+9*x*x-2*x);主函数中牛顿迭代法的部分: b0=NewtonIteration(0); /牛顿迭代法 printf("n牛顿迭代法:n"); printf("迭代值tt相邻两次误差n"); printf("%fn",b0); for(j=1;j+) bj=NewtonIteration(bj-1); d2=fabs(bj-bj-1); printf("%ft%fn",bj,d2); if(d2<1e-4) bre

7、ak; 两个迭代法完整C语言代码如下:#include <stdio.h>#include <math.h>#include <stdlib.h>#define MAXSIZE 30float SimpleIteration(float x) /简单迭代 return pow (x*x+2-exp(x)/3.0,1.0/3); /pow (double x,double y);函数为求x的y次方 float NewtonIteration(float x) /牛顿迭代 return x-(exp(x)+3*x*x*x-x*x-2)/(exp(x)+9*x*x

8、-2*x);void main() float aMAXSIZE; float bMAXSIZE; float d1=1; float d2=1; int i,j; a0=SimpleIteration(0); /简单迭代法 printf("简单迭代法:n"); printf("迭代值tt相邻两次误差n"); printf("%fn",a0); for(i=1;i+) ai=SimpleIteration(ai-1); d1=fabs(ai-ai-1); printf("%ft%fn",ai,d1); if(d1&

9、lt;1e-4) break; b0=NewtonIteration(0); /牛顿迭代法 printf("n牛顿迭代法:n"); printf("迭代值tt相邻两次误差n"); printf("%fn",b0); for(j=1;j+) bj=NewtonIteration(bj-1); d2=fabs(bj-bj-1); printf("%ft%fn",bj,d2); if(d2<1e-4) break; 执行程序,结果如下:可见,牛顿迭代法的收敛速度大于简单迭代法,具体详见实验结果与分析。2、实验2(1

10、)实验内容·已知如下数据:x: 1.0000 1.4000 1.8000 2.2000 2.6000 3.0000 3.4000 3.8000 4.2000 4.6000 5.0000y: 2.7183 6.6448 15.3667 30.1867 52.6542 84.5925 128.1972 186.2022 262.1349 360.7020 488.3660·数据可能来自于不超过3阶多项式和指数、对数函数线性组合形成的复合函数(1, x, x2, x3, ex, ln(x),请采用最小二乘算法确定复合函数中各个函数项的系数。(2)主要步骤最小二乘法是在确定函数形式

11、的情况下,找出一条最靠近所有数据点的直线,其判定规则是i=0mwii2达到最小。在求解的过程中,用最小二乘法拟合复合函数的过程实际上就是求法方程组的过程。分别写出各项的内积(j,k)和(f,k)然后求解方程组(0,0)(0,n)(n,0)(n,n)a0an=(f,0)(f,n)根据题目中给出的数据点和复合函数形式,可以定义出如下的6种基函数,具体的MATLAB代码如下:function y=f(x,n)if n=1 y=1;endif n=2 y=x;endif n=3 y=x.2;endif n=4 y=x.3;endif n=5 y=exp(x);endif n=6 y=log(x);en

12、dend然后在M命令文件中调用上述函数,并输入相应的n。整个法方程组的系数矩阵可以用一个三重for循环实现,等号右侧的矩阵用另一个二重循环实现,实现系数矩阵的MATLAB代码如下:for k=1:6 %控制行 for i=1:6 %控制列 for j=1:11 %控制所有元素求和 D(k,i)=f(X(j),k).*f(X(j),i)+D(k,i); end endend等式右边的矩阵的MATLAB代码如下:for l=1:6%控制行 for m=1:11%控制所有元素求和 F(l)=f(X(m),l).*Y(m)+F(l); endend完整的MATLAB代码如下:function a=LS

13、()clcclearformat shortX=1 1.4 1.8 2.2 2.6 3 3.4 3.8 4.2 4.6 5;%11个元素Y=2.7183 6.6448 15.3667 30.1867 52.6542 84.5925 128.1972 186.2022 262.1349 360.7020 488.3660;D=zeros(6);F=zeros(1,6)'a=;for k=1:6 for i=1:6 for j=1:11 D(k,i)=f(X(j),k).*f(X(j),i)+D(k,i); end endendfor l=1:6 for m=1:11 F(l)=f(X(m

14、),l).*Y(m)+F(l); endenda=DF %求解end得出的结果如下:a = -2.0006 0.0006 -1.0000 3.0000 1.0000 -5.0008所以,拟合出的复合函数应为fx=-2.0006+0.0006x-1x2+3x3+ex-5.0008ln(x)3、实验3(1)实验内容·选择一种数值积分方法求解下列函数在区间0,2内的积分值,要求精度小于10-5: f(x) = (3x-x2+x3+ex)0.5·给出迭代步数和最终的步长,并分析你所采用方法的优缺点。(2)主要步骤在积分难求出解析解时通常用数值解的方法求积分结果的近似值,在本题的实现

15、方法上选用复合Simpson公式进行数值积分的计算,并从步数n=2,步长h=12开始逐步细化步长,增大步数,直到精度满足题目中的要求10-5。首先在定义一个题目中给出的待积分的函数,C语言代码如下:double function(double x) double s; s=sqrt(3*x-x*x+x*x*x+exp(x); return s; 然后编写复合Simpson公式,将其定义在一个独立的函数中,C代码如下:double ReiterationOfSimpson(double a,double b,double n,double f(double x) double h,fa,fb,x

16、k,xj; h=(b-a)/n; fa=f(a); fb=f(b); double s1=0.0; double s2=0.0; int k,j; for(k=1;k<n;k+) xk=a+k*h; s1=s1+f(xk); for(j=0;j<n;j+) xj=a+(j+0.5)*h; s2=s2+f(xj); double sn; sn=h/6*(fa+fb+2*s1+4*s2); return sn; 最后在主函数中定义初始步数n为2,初始步长h为0.5,并通过for循环逐步增大n,直到相邻两次误差小于10-5,具体的C代码如下:void main() double n=2;

17、 double h=1/n; int i; double SMAXN; printf("=复合Simpson公式法=nn"); printf("迭代步数t步长tt积分数值t误差n"); S0=ReiterationOfSimpson(0,2,n,function); printf("%dtt%ft%fn",(int)n,h,S0); n+; h=1/n; S1=ReiterationOfSimpson(0,2,n,function); printf("%dtt%ft%ft%fn",(int)n,h,S1,S1-S0

18、); for(i=2;Si-1-Si-2>=1e-5;i+) n=i+2; h=1/n; Si=ReiterationOfSimpson(0,2,n,function); printf("%dtt%ft%ft%fn",(int)n,h,Si,Si-Si-1); 程序执行的结果如下:可见,在迭代步数n为10时,即步长为0.1时,精度达到要求,且此时的积分数值约为4.941104。优劣性分析见实验结果与分析。四:实验结果与分析实验1:通过采用简单迭代法和牛顿迭代法处理同一问题,观察达到指定精度时所需的不同迭代次数,简单迭代法经过7步之后误差小于10-4,牛顿迭代法经过6步

19、之后误差小于10-4,所以在收敛速度上来讲,牛顿迭代法的性能优于简单迭代法。实验2:通过采用最小二乘法拟合一个由不超过3阶多项式和指数、对数函数线性组合形成的复合函数,通过解法方程组求解,在求解过程中熟悉了最小二乘法的求解方法和基本概念,包括最小二乘法和插值的区别所在。在计算机中可以通过循环较容易地求得各个基函数的内积,从而构建求解法方程组。实验3:通过用数值积分方法求解一个函数在一个积分区间的积分值,并根据具体的精度要求给出迭代步数和最终步长。在方法上我选用了复合Simpson公式法,复合Simpson公式在Simpson公式的基础上提高了求积的精度,将a,b等分成n个子区间,在每个子区间上

20、使用低阶求积公式计算,然后把所有子区间上的计算结果求和。复合Simpson公式的优点在于通过增加子区间的个数可以缩小误差提高精度,这一点比单纯的Simpson公式,梯形公式和Cotes公式要好。但是缺点在于复合Simpson公式是4阶收敛的,在收敛速度上没有复合Cotes公式收敛的快,所以需要n=10时才能达到精度要求。五:结论(讨论)1、实验结论在本次数值计算实验课中一共完成了三个实验,分别对应理论课程中三章的内容,分别复习并实践了非线性方程的迭代解法,插值与拟合,积分的数值解法等内容。这三个实验涉及到了数值计算方法的主要内容,熟悉了数值计算方法的理论知识,并加以应用,在有一定创新度并结合各种具体编程环境的基础上,在实践中体会到了数值计算方法在实际问题中的作用。在具体实现上,分别用C语言实现了1,3两个实验,用MATLAB实现了第2个实验,锻炼了把数值计算方法结合到不同应用场景的能力,为今后在各领域的使用打下基础。在具体的实验上,在第一个实验中,应用了简单迭代法和牛顿迭代法解常见的非线性方程,熟

温馨提示

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

评论

0/150

提交评论