信息安全专业知识

C++实训--数值积分

2019-04-29  本文已影响12人  简言之_
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");
}
上一篇 下一篇

猜你喜欢

热点阅读