//复合梯形和辛普森公式的算法实现
#include<iostream>
#include<cmath>
using namespace std;
class formula{
public:
formula(double a,double b,int n);
double function(double x);
double Trapezoid();
double Simpson();
private:
double a;
double b;
int n;
};
formula::formula(double a,double b,int n){
this->a=a;
this->b=b;
this->n=n;
}
double formula::function(double x) {
return pow(2.71828182845904523, x);
}
//复合梯形公式
double formula::Trapezoid(){
double h = (a - b) / n;
double T, temp = 0;
for (int i = 1; i <= n - 1; i++){
double x = b + i * h;
temp += function(x);
}
T = (h / 2) * (function(a) + 2 * temp + function(b));
return T;
}
//复合Simpson积分公式
double formula::Simpson(){
int m = n / 2;
int i;
double h = (a - b) / n;
double S = 0;
for (i = 1; i <= m - 1; i++){
double x = b + 2 * i * h;
S += function(x);
}
double temp = 0;
for (i = 1; i <= m; i++){
double x = b + (2 * i - 1) * h;
temp = temp + function(x);
}
S = (h / 3) * (function(a) + 2 * S + 4 * temp + function(b));
return S;
}
int main(){
int n;
double a, b;
cout << "请输入区间等分的个数:" << endl;
cin >> n;
cout << "请输入积分上限a:\n";
cin >> a;
cout << "请输入积分下限b:\n";
cin >> b;
formula form(a,b,n);
double T = form.Trapezoid();
double S = form.Simpson();
cout << "求得积分上限为" << a << ",积分下限为" << b << "的关于e^x的积分值为:" <<endl;
cout << "梯形公式求得:" << T << endl;
cout << "复合Simpson积分公式得:" << S << endl;
system("pause");
return 0;
}
c++实现复合求积公式 和辛普森公式
于 2020-11-29 16:26:37 首次发布