- 问题描述
用复化梯形公式求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;
}
- 运行截图