复化Simpson公式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-2013(1)专业课程实践论文
复化Simpson公式
肖云龙,0818180214,R数学08-2班
Simpson 公式是一个数值积分公式,在计算一些多项式函数(三次或三次一下)的定积分时会得出精确值。
但容易验证它对于)(x f =4x 通常是不准确的,因此,Simpson 公式实际上具有三次代数精度。
提高阶的途径并不总能取得满意的效果。
为了改善求积的精度,通常采用复化求积法。
Simpson 公式
)]()2
(4)([6b f b
a f a f a
b S +++-= 将定积分⎰=b
a dx x f I )(的积分区间],[
b a 分隔为n 等分,各节点为
n j jh a x j ,,1,0, =+= n
a
b h -=
复化梯形公式的形式
])()(2)([21
1
∑-=++=n j j n b f x f a f h
T
记子区间[1,+j j x x ] 的中点为2
1+
j x
则复化Simpson 公式:
n S ])(4)(2)()((61
02
111∑∑-=+-=+++=n j j n j j x f x f b f a f h
#include<iostream.h>
#include<math.h>
double function(double x)
{ double s;
s=x/(4+x*x);
return s;
}
double ReiterationOfSimpson(double a,double b,double n,double f(double x)) { double h,fa,fb,xk,xj;
h=(b-a)/n;
fa=f(a);
fb=f(b);
double s1=0.0;
double s2=0.0;
for(int k=1;k<n;k++)
{ xk=a+k*h;
s1=s1+f(xk);}
for(int j=0;j<n;j++)
{ xj=a+(j+0.5)*h;
s2=s2+f(xj);}
double sn;
sn=h/6*(fa+fb+2*s1+4*s2);
return sn;
}
main()
{
double a,b,Result,n;
cout<<"请输入积分下限:"<<endl;
cin>>a;
cout<<"请输入积分上限:"<<endl;
cin>>b;
cout<<"请输入分割区间数n:"<<endl;
cin>>n;
cout<<"复化Simpson公式计算结果:";
Result=ReiterationOfSimpson(a,b,n,function);
cout<<Result<<endl;
return 0;}
例1.用Simpson 公式求积分⎰
+1
02
4x x
解:运行程序
(1) 请输入积分下限:输入a 的值为0,回车。
(2) 请输入积分上限:输入b 的值为1,回车。
(3) 请输入分割区间数n :输入n 的值为10,回车。
(4) 显示结果:复化Simpson 公式计算结果:0.111572
例2.用Simpson 公式求积分⎰1
02x
解:运行程序
(1) 请输入积分下限:输入a 的值为0,回车。
(2) 请输入积分上限:输入b 的值为1,回车。
(3) 请输入分割区间数n :输入n 的值为10,回车。
(4) 显示结果:复化Simpson 公式计算结果:0.333333。