C++实训--数值积分

作者: 简言之_ | 来源:发表于2019-04-29 22:57 被阅读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");
    }
    

    相关文章

      网友评论

        本文标题:C++实训--数值积分

        本文链接:https://www.haomeiwen.com/subject/bcrpnqtx.html