自适应(梯形和Simpson)算法报告.docxVIP

  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文档。上传文档
查看更多
高等数值分析大作业1.问题描述用自适应梯形和Simpson公式计算积分:使其误差不超过。要求:算法;程序代码;计算结果和必要分析说明。2.算法分析自适应积分方法可以利用有限的计算量,针对数值变化的剧烈程度自动地在不同区间上选择不同的步长,使计算误差尽可能高,或者使得在不同的区间上都能达到指定的精度。对于任意一个计算区域,首先要判断在当前的步长下能不能达到指定的精度。如果达到指定的精度,那么该区域的积分就利用相应的公式计算出来;如果达不到,则步长需要减半,即原来的区域要一分为二,继续判断在该步长下是否达到要求。如果达不到,步长继续减半;如果达到要求,计算该区域积分后输出。梯形算法需要区域首尾两个点,步长减半后区间一分为二,产生三个点(两个区域端点和一个中点)。这三个点分别记为a,(a+b)/2,b。利用a和b的梯形算法计算结果记为S,利用分区间的梯形算法计算结果记为L+R。理论上,L+R的精度要高。根据误差来判断是否继续细分区间,根据计算步长的关系可以得到下面的区间关系图。图1 积分区间的步长关系很明显,采用递归调用的方法可以逐步对每一个达到误差要求的区间求积分,把所以区间积分值累加就是最终的结果。这一过程表述为:最开始就将区间等分(两个端点和一个中点),先判断积分的误差精度,如果达到要求就把该积分累加,否则等分区间,分为左右两个区间再次积分,积分后继续判断误差。图2 程序流程图3.计算结果3.1梯形公式采用复合梯形公式可以得到下面的计算结果:步长h等分区间数N积分值0.1206.720920.012005.03691607929540.0001200004.767817.........真值4.76501546038038...3.2 自适应法不论是采用梯形公式还是辛普森公式,它们的自适应算法总体都是一样的。唯一的区别是,辛普森法需要多算一个中点的函数值,以及各函数值的系数不同。都是自适应算法,梯形公式和辛普森公式得到的结果如下表。积分结果梯形公式4.765015454306辛普森公式4.7650154687653.3结果分析积分表达式为:被积函数:简单地讨论一下被积函数的性质。采用自适应算法,是因为被积函数的波动较大,有的部分平缓,有的地方陡峭。对于陡峭的区域就需要加密处理。先看被积函数的图像。从图中看出函数在1附近的变化剧烈,而在3附近变化十分缓慢。再看被积函数的导数图像。先对函数求导,作出导数绝对值的图像。从图中看到绝对值最大的就在x=1处。图3 被积函数图像图4 被积函数导数的绝对值4程序代码(C)#include stdafx.h#include stdio.h#include math.h#include stdlib.hdouble f(double x){return 100/(x*x*x)*sin(10/x);}double inte1(double a,double b,double h){//return 0.5*h*(f(a)+f(b));//梯形公式return h*(f(a)+f(b)+4*f((a+b)/2))/6;//辛普森公式}double inte(double a,double b,double h,double acc,double S){double L,R;L=inte1(a,b-h/2,h/2);R=inte1(b-h/2,b,h/2);if(abs(L+R-S)=acc)return L+R;elsereturn inte(a,a+h/2,h/2,acc/2,L)+inte(a+h/2,b,h/2,acc/2,R);}void main(){FILE*out=fopen(zsy.txt,w);fprintf(out,积分=%2.12f,inte(1.0,3.0,2,0.000001,inte1(1.0,3.0,2)));fclose(out);}

文档评论(0)

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

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

1亿VIP精品文档

相关文档