📄 数值积分.cpp
字号:
// 数值积分.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#define PI 3.141592653589793238462643
class CIntegral
{
public:
double a, b; //成员变量,分别表示积分的下界与上界
double epsilon, MaxD; //成员变量,分别表示积分的误差限和导数限。
CIntegral(double, double); //构造函数
double f(double); //成员函数,表示待积分的运算函数
double Simpson(); //成员函数,表示Simpson公式的运算过程,返回运算结果;
};
CIntegral::CIntegral(double xa, double xb) //构造函数
{
epsilon=0.5E-8;
MaxD=24.0;
a=xa;
b=xb;
}
double CIntegral::f(double x) //成员函数,表示待积分的运算函数
{
return 4.0/(1.0+x*x);
}
double CIntegral::Simpson() //成员函数,用来计算Simpson积分
{
double h,s,x;
int i,n;
//利用误差公式估计h
h=2*exp(log(epsilon*180/MaxD/(b-a))*0.25);
n=(int) ((b-a)/h+0.5); //n表示分段数目
h=(b-a)/double(n); //h表示积分步长
//计算s
s=0.0;
for(x=a,i=0;i<n;i++,x+=h)
s+=h/6*(f(x)+4*f(x+h/2)+f(x+h));
//返回s,为最终积分数值
return s;
}
void main()
{
CIntegral test(0.0,1.0); //生成CIntegral类的对象test,并给出积分上下界。
double res=test.Simpson(); //计算积分
setprecision(16);
cout<<res<<endl; //输出结果
cout<< PI-res<<endl; //输出误差
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -