/**
复化Simpson积分
m-1 m-1
复化Simpson公式: Tn = (h/3) * { f(a)/2 + 4 * ∑ f ( x2i + 2 * ∑ f ( x2i+1 ) + f(b)/2 )}
i=0 i=1
步长: h=b-a/n, n=2*m
属性: 数值积分法
《数值计算方法与算法》-2 Editon -科学出版社 P55
代码维护:2007.04.20 pengkuny
**/
#include<iostream>
#include<cmath>
using namespace std;
#define f(x) (sin(x)) //举例函数
#define epsilon 0.00001 //精度
//复化Simpson公式
float Simpson(float aa, float bb, long n)
{//aa,bb:端点 n,分区数
if (!(n%2)) //保证n为偶数
n = n+1;
long m = n/2;
float sum = 0;
float h = (bb-aa)/n; //步长
float sum1 = 0, sum2 = 0;
for (long i=0; i<m; i++)
{
sum1 += f(aa + (2*i+1)*h);
}
for (long i=1; i<m; i++)
{
sum2 += f(aa + (2*i)*h);
}
sum = f(aa) + f(bb) + 2*sum2 + 4*sum1;
return (h*sum/3);
}
int main()
{
float a,b;
long n;
cout<<"复化Simpson积分,请输入积分范围a,b:"<<endl;
cin>>a>>b;
cout<<"请输入分割区间数n:"<<endl;
cin>>n;
cout<<"积分结果:"<<Simpson(a, b, n)<<endl;
system("pause");
return 0;
}
posted on 2007-04-20 10:55
哈哈 阅读(1505)
评论(3) 编辑 收藏 引用