复化梯形求积公式C++实现

  • 问题描述

用复化梯形公式求f(x) = sin(x)在区间[0,1]的积分。

  • 复化梯形公式的原理

其原理就是把整个区间平均分成N段区间,每个区间用梯形公式求其小梯形面积,最后累加所用小梯形就可近似计算出其总积分。

  • 复化梯形公式


  • 算法实现
#include <iostream>
#include <math.h>

using namespace std;

//保存生成的节点横坐标
double dataX[1000];
//保存生成的节点纵坐标
double dataY[1000];
//定义一个数学函数
double function(double x);
//分割区间
void devide(double a,double b,int N);
//复化梯形求积
double getIntegralValue(double a,double b,int N);

int main()
{
    //产生的节点数
    double a,b ;
    int N;
    char ch = 'n';
    while(ch != 'y')
    {
        cout<<"请输入等分区间数:";
        cin>>N;
        cout<<"请输入左右区间范围:";
        cin>>a;
        cin>>b;
        devide(a,b,N);
        cout<<"积分值为:"<<getIntegralValue(a,b,N)<<endl;
        cout<<"是否继续?按y退出:";
        cin>>ch;
    }
    return 0;
}
//定义一个数学函数
double function(double x)
{
    return sin(x);
}
//分割区间
void devide(double a,double b,int N)
{
    double x;
    double dX = (b - a) /(N) ;
    for(int i=0;i<=N;i++)
    {
        x = a + i * dX;
        dataX[i] = x;
        dataY[i] = function(x);
    }
}
//复化梯形求积
double getIntegralValue(double a,double b,int N)
{
    double sum = 0;
    //求2*f(xk)的总和,1<= k <= n-1
    for(int i=1;i<=N-1;i++)
    {
        sum += 2*dataY[i];
    }
    double value =  0.5* ((b-a)/N)*(dataY[0] + sum + dataY[N]);
    return value;
} 

  • 运行截图



  • 14
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值