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

  • 82
  • 0
  • 约1.64千字
  • 约 5页
  • 2016-12-17 发布于重庆
  • 举报
高等数值分析大作业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)

1亿VIP精品文档

相关文档