资源描述
实验四 复合辛普森公式
一、实验目的
1、理解复合辛普森公式的方法原理;
2、利用复合辛普森公式计算积分。
二、实验步骤
1.算法原理
复合辛普森原理:
将区间划分为n等分,在每个子区间上采用辛普森公式,若记则得
记
称为复合辛普森求积公式,其余项为
于是当时,与复合梯形公式相似有
易知误差阶为,收敛性是显然的,实际上,只要则可得到收敛性,即
此外,由于中求积公系数均为正数,故知辛普森公式计算稳定。
2.算法步骤
复合辛普森:
首先将区间划分为n等分,在每个子区间上采用辛普森公式,若记则得
3.程序流程图
开始
输入数据a,b,n
,
结束
,
输出
三.程序代码
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define eps 0.000001 //计算精度
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;
}
四、心得体会
通过本次试验,我理解复合辛普森公式的方法原理,并且能利用复合辛普森公式计算积分,在数值分析的理论知识上又有了较大的收获,在进行编程的过程中,我已经基本熟练了数值算法的程序过程,能独立的在有限的时间内完成,这对以后的学习会有很大的帮助。
展开阅读全文