image.png
#include <iostream>
using namespace std;
struct point
{
double x;
double y;
};
double Integral(point L, point R)//梯形公式
{
return (L.y+R.y)*(R.x-L.x)/2;
}
double Integral(point L,point M, point R) //辛普森公式 (等间距才可以使用)
{
return (L.y+4*M.y+R.y)*(R.x-L.x)/6;
}
double f(double x)
{
return x*x-4*x+6;
}
void produce_point(point *a,int n,double l,double r)//产生n个区间为l-r的点并存入a[]中
{
double h=(r-l)/n;//将区间分成n份
for(int i=0;i<n;i++)//产生n个点
{
a[i].x=l+h*i;
a[i].y=f(l+h*i);
}
}
double jftx(point *a,int n)//用梯形公式算n-1个梯形(n个点)面积之和
{
double s=0;
for(int i=0;i<n-1;i++)
s+=Integral(a[i],a[i+1]);
return s;
}
double jfxps(point *a,int n)//用辛普森公式算n-1个梯形(n个点)面积之和
{
double s=0;
for(int i=0;i<n-2;i+=2)
s+=Integral(a[i],a[i+1],a[i+2]);
return s;
}
int main()
{
point a[9];
double l=0,r=1;//区间[0,1]
produce_point(a,9,l,r);
cout<<jftx(a,9)<<" "<<jfxps(a,9)<<endl;
system("pause");
}
网友评论