实验四 复合辛普森公式

  • 格式:doc
  • 大小:87.91 KB
  • 文档页数:4

实验四 复合辛普森公式

一、实验目的

1、理解复合辛普森公式的方法原理;

2、利用复合辛普森公式计算积分。

二、实验步骤

1.算法原理

复合辛普森原理:

将区间],[ba划分为n等分,在每个子区间1,kkxx上采用辛普森公式,若记,2121hxxkk则得

10)()(nkbadxxfdxxfI

).()]()(4)([61021fRxfxfxfhnnkkkk

1021)]()(4)([6nkkkknxfxfxfhS

],)()(2)(4)([6101121nknkkkbfxfxfafh

称为复合辛普森求积公式,其余项为

.),(),()2(180)(101)4(4nkkkkknnxxfhhSIfR

于是当],[)(4baCxf时,与复合梯形公式相似有

),(),()2(180)()4(4bafhabSIfRnn

易知误差阶为4h,收敛性是显然的,实际上,只要],[)(baCxf则可得到收敛性,即

banndxxfS)(lim

此外,由于nS中求积公系数均为正数,故知辛普森公式计算稳定。

2.算法步骤 复合辛普森:

首先将区间],[ba划分为n等分,在每个子区间1,kkxx上采用辛普森公式,若记,2121hxxkk则得

1021)]()(4)([6nkkkknxfxfxfhS])()(2)(4)([6101121nknkkkbfxfxfafh

3.程序流程图

三.程序代码

#include

#include

#include

#define eps 0.000001 //计算精度 开始

输入数据a,b,n

])()(2)([2)]()([211101nkknkkknbfxfafhxfxfhT],)()(2)(4)([6101121nknkkknbfxfxfafhS ,0knabh , khaxk

结束 nTIR1 ,nSIR2

21,RR输出1,RR输出1kk float func(double x) //% func-- 求积函数(函数文件)

{

while(x==0)

return 1;

double y;

y=(sin(x)/x);

return(y);

}

double bsimpson(double a,double b) //% a, b -- 求积区间

{

int i,n;

double h,p,e,s;

double t1,t2,s1,s2,x;

n=1;

h=b-a;

t1=h*(func(a)+func(b))/2.0;

s1=t1; /*用t1代替s1*/

e=eps+1.0;

while(e>=eps)

{

s=0.0;

for(i=0;i<=n-1;i++)

{

x=a+(i+0.5)*h;

s=s+func(x);

}

t2=(t1+h*s)/2.0;

s2=(4*t2-t1)/3.0;

e=fabs(s2-s1);

t1=t2;

s1=s2;

n=n+n;

h=h/2.0;

}

return(s2);

}

main()

{

double a,b,s;

printf("input a,b=");

scanf("%lf,%lf",&a,&b);

s=bsimpson(a,b); printf("s=%lf\n",s);

getch();

return 0;

}

四、心得体会

通过本次试验,我理解复合辛普森公式的方法原理,并且能利用复合辛普森公式计算积分,在数值分析的理论知识上又有了较大的收获,在进行编程的过程中,我已经基本熟练了数值算法的程序过程,能独立的在有限的时间内完成,这对以后的学习会有很大的帮助。