ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:225.04KB ,
资源ID:3025754      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3025754.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值计算 程序设计数值积分.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值计算 程序设计数值积分.docx

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

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

3、计主要内容 3 1. 程序设计目的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)编程实现龙贝格(R

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

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

6、计算不同积分,要求误差不超过10-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之间有如下关系: 其中三、方法详

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

9、: 四、问题解决:程序代码:1)下面为复化梯形和龙贝格的程序及运行结果/sin(x)/x:#include#include#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 时,函数值为1 return(sin(x)/x);/返回被积函数的值 double Tm(double T1,double T2,int

10、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表示区间等分数 double h=(b-a)/n; double temp=0; for(int i=0;in;+i) temp+

11、=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;meps)/比较T-数表第(I+1)行和第i行的最后 一个数据的差值 /将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; doub

12、le 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+=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(%.10fn,j); return 0;下面即为sin(x)/x在复化梯形公式和龙贝格积分的计算结果下面即为cos(sin(x)在复化梯形公式和龙贝格积分的计算结果2)下面为辛普森的程序及cos(sin(x)运行结果#include #include#define N 16385double func(double x)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1