数值计算 程序设计数值积分_第1页
数值计算 程序设计数值积分_第2页
数值计算 程序设计数值积分_第3页
数值计算 程序设计数值积分_第4页
数值计算 程序设计数值积分_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、?数 值 方 法?课程设计内容提要: 实际问题中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相联系。依据微积分根本定理,对于积分只要找到被积函数f(x)的原函数F(x)。F(x)=f(x),便有牛顿莱布尼兹公式来求得积分但实际运用这种方法往往有困难,因为大量的被积函数,找不到用初等函数表示的原函数;另外当f(x)是由实验测量或数值计算给出的一张数据表时,牛顿莱布尼兹公式也不能直接运用,因此,实际往往通过其他的一些方法如利用复化梯形公式、龙贝格公式、牛顿莱布尼兹公式等来求解。复化梯形求积法通常把积分区间等分成假设干个子区间,在每一个子区间上用低阶的求积公式,对所有的

2、子区间求和即得整个区间 a,b 上的积分公式。龙贝格算法是在区间逐次分半过程中,对梯形公式的近似值进行加权平均获得准确程度较高的积分近似值的一种方法,它具有公式简练、计算结果准确、使用方便、稳定性好等优点,因此在等距情形宜采用龙贝格求积公式。龙贝格算法也称为逐次分半加速法,它是在梯形公式、辛普森公式和牛顿莱布尼兹公式之间的关系的根底上构造出一种加速计算积分的方法。作为一种外推算法,它在不增加计算量的前提下提高了误差的精度。在等距基点的情况下,用计算机计算积分值通常都采用把区间逐次分半的方法进行。这样,前一次分割得到的函数值在分半以后仍可被利用并且易于编程。目 录一、程序设计主要内容 3 1.

3、程序设计目的3 2.程序设计背景 33程序设计要求34程序设计意义45所做工作:4二、理论分析4 1、问题分析42、理论依据及求解对策4三、方法详解5 1、推导 52分析及程序框图 5四、问题解决9五、结果分析 13六、体会 14七、参考文献 14一程序设计主要内容1. 程序设计目的:1学会用数值积分避开求f(x)的原函F(x)的繁琐步骤,并可以有效的控制结果,使其在要求的误差范围之内。2在某些求积函数中,用数值积分求解一些原函数F(x)不能用初等函数表示成有限形式 。3熟练掌握用复化梯形法和龙贝格法求解积分。4编程实现复化梯形法的递推算法。5编程实现龙贝格(Romberg)积分法。2.程序设

4、计背景: 对于较大积分区间、复杂被积函数、较高精度要求的数值积分问题,需要较多的求积节点。如果采用高阶插值型求积公式,当被积函数f(x)不是多项式函数时,求积过程可能不稳定,因此这时只能采用复化求积。而龙贝格求积是对逐次分半梯形公式求积公式加速的一种外推方法,收敛速度较复化求积更快,也是一种实用的数值积分方法。在一元函数的积分学中,我们已经熟知,假设函数f(x)在区间a, b上连续且其原?函数为F(x) ,那么可用牛顿莱布尼兹公式来求定积分。牛顿莱布尼兹公式虽然在理论上或在解决实际问题中都起了很大的作用,?但它并不能完全解决定积分的计算问题。因为定积分的计算常常会碰到以下三种情况: (1)被积

5、函数f(x)的原函数F(x)不易找到。许多很简单的函?数,例等,其原函数都不能用初等函数表示成有限形式。 (2)被积函数f(x)没有具体的解析表达式。其函数关系由表格或图形表示,无法求出原函数。 (3)尽管f(x)的原函数能表示成有限形式但其表达式相当复杂。另外,许多实际问题中的被积函数往往是列表函数或其他形式的非连续函数,对这类函数的定积分,也不能用不定积分方法求解。由于以上原因,数值积分的理论与方法一直是计算数学研究的根本课题。3程序设计要求:1用复化梯形法的递推算法计算不同积分,要求误差不超过10-10 ,并输出积分区间的分割数。2用Romberg 积分法计算不同积分,要求误差不超过10

6、-10 ,并与Simpson 方法比拟计算量。4程序设计意义:数值计算的广泛性和深入性已成为现代科技开展的重要特征,数值计算和理论研究、科学实验并列为科学研究的三大支柱。用数学方法、将计算机作为工具、提高解决各种实际问题的能力是现代社会的需要,也是知识更新的必要环节。数值积分方法作为数值计算方法中的一个重要局部,如果将其与c+等语言中程序设计相结合。用正确的数值计算方法编写相应的c+程序。我们就能很好地解决一些复杂的实际问题,做到既有速度又有精度。 5所做工作: 用VC+编程实现复化梯形法的递推算法和龙贝格(Romberg)积分法,并控制了结果的精度,比拟辛普森和龙贝格积分的计算量,使其在要求

7、的误差范围之内。二、理论分析:1、问题分析:因原问题要求误差不超过10-10 ,需把积分区间a,b分成假设干个小区间,使被积函数f(x)在每一个小区间内足够平滑,然后用低阶数值积分公式求f(x)在每一个小区间内的积分,再对所有小区间的积分结果求和,就得到了f(x)在a,b上的积分。2、理论依据及求解对策:1把积分区间a,b等分为m个小区间,令步长h=,求积节i=0,,1,2m,等距节点复化梯形公式为 它的余项函数为 2用Tm表示把a,b作m等分并按复合梯形公式求积的结果,将每一小段再对分,令新的小段的长h=h/2,那么T2m与Tm之间有如下关系: 其中三、方法详解:1、推导:1用梯形公式求f(

8、x)在每个小区间上积分余项之和:2等距节点复化梯形公式的余项为每个小子区间上积分余项之和: 3设中最小的1项为,最大的1项为。由连续函数介值定理可知,在之间至少存在1点,使。又因为 所以 所以 2分析及程序框图:1x为1时,函数值为1;否那么返回函数f(x)2)龙贝格中根据T1、T2和m计算下一个数并返回return(pow(4,m)*T1-T2)/(pow(4,m)-1)3龙贝格积分法求解过程4用复化梯形法的递推算法求解过程5辛普森积分法的求解过程分析:在积分区间上,根据给定的插值条件、和,构造一个二次插值求积多项式,并以的积分值近似的代替。从几何角度而言,是用过三点的抛物线面积近似的代替积

9、分的曲边面积,如图:y=(x)ayxOb+a/2by=f(x)流程图: 四、问题解决:程序代码:1下面为复化梯形和龙贝格的程序及运行结果/sin(x)/x:#include<stdio.h>#include<math.h>#define eps 1e-10double fun(double x);double Romberge(double a,double b);/函数Tm()为T-数表的计算公式double Tm(double T1,double T2,int m);double fun(double x)if(x=0) return 1;/x为1 时,函数值为1r

10、eturn(sin(x)/x);/返回被积函数的值 double Tm(double T1,double T2,int m) /根据T1、T2和m计算下一个数并返回 return(pow(4,m)*T1-T2)/(pow(4,m)-1); double Romberge(double a,double b) double T10;/用于存储T-数表第一行的数据 int I=1; T0=(b-a)*(fun(a)+fun(b)/2; double T1,T2; int flag;/flag用于标记十分求的符合精度的值 do flag=0; int n=int(pow(2,I-1);/n表示区间等

11、分数 double h=(b-a)/n; double temp=0; for(int i=0;i<n;+i) temp+=fun(a+(i+1.0/2)*h); T1=T0/2+h*temp/2;/利用变步长提醒公式计算T-数表第I+1行的第一个数据 /将T-数表第I+1行的前I-1个数据存入数值 for(int m=1;m<I;+m) T2=Tm(T1,Tm-1,m); Tm-1=T1; T1=T2; T2=Tm(T1,TI-1,1);/计算T-数表第I+1行的最后一个数据 if(fabs(T2-TI-1)>eps)/比拟T-数表第(I+1)行和第i行的最后 一个数据的差

12、值 /将T-数表的第I+1行的最后两个数据存入数组 TI-1=T1; TI=T2; +I; flag=1;/表示没有求得符合精度的值 while(flag); return T2;/返回符合精度的解 double btrapeze (double a,double b)int n=1;double h=b-a;double t1=h*(fun(a)+fun(b)/2;double t2=t1/2+h*fun(a+h/2)/2;while (fabs(t2-t1)>eps)n*=2;h/=2;t1=t2;double temp=0;for (int i=1;i<=n;+i)temp+

13、=fun(a+(i-1.0/2)*h);t2=t1/2+h*temp/2;return t2;/返回步长h最适宜时的定积分的近似值int main() double a,b,i,j;/a,b分别为积分的上限,下限,h为步长a=0;b=1;i=Romberge(a,b); printf("用龙贝格积分法计算sin(x)/x在0到1上的积分为:n"); printf("%.10f",i); j=btrapeze(a,b); printf("n用复化梯形法计算sin(x)/x在0到1上的积分为:n"); printf("%.10f

14、n",j); return 0;下面即为sin(x)/x在复化梯形公式和龙贝格积分的计算结果下面即为cos(sin(x)在复化梯形公式和龙贝格积分的计算结果2下面为辛普森的程序及cos(sin(x)运行结果#include <stdio.h>#include<math.h>#define N 16385double func(double x)double y;y=cos(sin(x);return (y);void gedianzhi(double y,double a,double h)int i;for(i=0;i<=N;i+)yi=func(a+

15、i*h);double simpson(double y,double h)double s,s1,s2;int i;s1=y1;s2=0.0;for (i=2;i<=N-2;i=i+2)s1+=yi+1;s2+=yi;s=y0+yN+4.0*s1+2.0*s2; return (s*h/3.0);main()double a,b,h,s,fN+1;printf("inout a,b=");scanf("%lf,%lf",&a,&b);h=(b-a)/(double)N; gedianzhi(f,a,h);s=simpson(f,h

16、);printf("s=%lfn",s);运行结果:五、结果分析:Romberg和Simpson方法运行的结果根本一致,但Romberg法速度更快、精度更高。n的值越大精确就会越高。但对于Simpson方法当n的值加大时,计算量成倍的增加。六、体会:在课程设计的同时不仅稳固了以前所学过的知识,而且可以学到很多在书本上所没有学到过的知识,特别是团队合作能力。通过这次课程设计使我懂得了理论与实际相结合是很重要的,增强了我们处理问题的能力。还有只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握,从而提高自己的实际动手能力和独立思考的能力。学习必须通过实践

温馨提示

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

评论

0/150

提交评论