复化梯形法复化矩形法变步长梯形变步长辛普森.docVIP

复化梯形法复化矩形法变步长梯形变步长辛普森.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
陕西科技大学 机械教改班 用C++的积分 其实积分的思想就是,微分—求和—取极限,如果是用纯手工法那就是先对一个函数微分,再求出它的面积,在取极限,因为我们的计算速度和计算量有限,现在有了计算机这个速度很快的机器,我们可以把微分后的每个小的面积加起来,为了满足精度,我们可以加大分区,即使实现不了微分出无限小的极限情况,我们也至少可以用有限次去接近他,下面我分析了四种不同的积分方法,和一个综合通用程序。 一.积分的基本思想 1、思路:微分—求和—取极限。 2、Newton—Leibniz公式 SKIPIF 1 0 其中, SKIPIF 1 0 被积函数 SKIPIF 1 0 的原函数。 3、用计算机积分的思路 在积分区间内“微分—求和—控制精度”。因为计算机求和不可以取极限,也就是不可以无限次的加下去,所以要控制精度。 二.现有的理论 1、一阶求积公式---梯形公式 SKIPIF 1 0 他只能精确计算被积函数为0、1次多项式时的积分。 2、二阶求积分公式——牛顿、科特斯公式 SKIPIF 1 0 他只能精确计算被积函数为0、1、2、3次多项式时的积分。 四种实现方法 复化矩形法 将积分区间[a,b]等分成n个子区间: SKIPIF 1 0 则h=(b-a)/n,区间端点值 SKIPIF 1 0 =a+kh SKIPIF 1 0 SKIPIF 1 0 ............................ SKIPIF 1 0 SKIPIF 1 0 源程序: #include iostream.h #includemath.h double f(double x) //计算被积函数 { double y; y=log(1+x)/(1+x*x); //被积函数 return y; } double Tn(double a,double b,int n) //求Tn { double t=0.0; double xk; //区间端点值 double t1,t2; //用来判断精度 do { double h=(b-a)/n; for(int k=1;k=n-1;k++) //每一小段的矩形叠加 { t1=t; xk=a+k*h; t+=h*f(xk); t2=t; } n++; //如果精度不够就对区间再次细分,直到达到精度要求 } while(fabs(t1-t2)=1e-7); //判断计算精度 return t; } void main() { double a=0.0; //积分下线 double b=2.0; //积分上限 int n=1024; //把区间分为1024段 coutTn(a,b,n)endl; //输出积分结果 } 执行结果: 复化梯形法 方法和复化矩形法类似,只是把原来的矩形小面积变成了梯形小面积,但是精确度明显提高了,也就是说达到同样的精度需要的时间少了。 SKIPIF 1 0 变形一下: SKIPIF 1 0 源程序: #include iostream.h #includemath.h double f(double x) //计算被积函数 { double y; y=log(1+x)/(1+x*x); //被积函数 return y; } double Tn(double a,double b,int n) //求Tn { double t=0.0; double xk; //区间端点值 double t1,t2,h=(b-a)/n; //用来判断精度 do { h=(b-a)/n; for(int k=1;k=n-1;k++) //余项叠加,相当于每一个小梯形相加 { t1=t; xk=a+k*h; t+=f(xk); t2

文档评论(0)

beoes + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档