设为首页 加入收藏

TOP

用矩形法(梯形法)求定积分 (一)
2014-11-23 20:16:29 来源: 作者: 【 】 浏览:12
Tags:矩形 梯形 积分

分析:
高中的时候,我们学习过,可以通过矩形法或者矩形法来求定积分。

思路就是将积分区间划分成n等份,然后将这n等份近似看成矩形(或梯形),然后对所有的矩形(或梯形)的面积进行求和。

简单的例子:
求函数X^2在的定积分

矩形法:


[cpp]
#include
#include
using namespace std;
int main(){
float fun(float x);
float a,b;
cout<<"请输入函数X^2的定积分的下限a和上限b:";
cin>>a>>b;
int n=50;//将区间划分成50份
float h=(b-a)/n;//h是每个区间分大小
float s=0;//s是矩形的面积的和
float i=0;
for(i=a;i s=s+fun(i)*h;
}
cout<<"\n结果是:"< cout< }
float fun(float x){
return pow(x,2);
}

#include
#include
using namespace std;
int main(){
float fun(float x);
float a,b;
cout<<"请输入函数X^2的定积分的下限a和上限b:";
cin>>a>>b;
int n=50;//将区间划分成50份
float h=(b-a)/n;//h是每个区间分大小
float s=0;//s是矩形的面积的和
float i=0;
for(i=a;i s=s+fun(i)*h;
}
cout<<"\n结果是:"< cout< }
float fun(float x){
return pow(x,2);
}


梯形法:


[cpp]
#include
#include
using namespace std;
int main(){
float fun(float x);
float a,b;
cout<<"请输入函数X^2的定积分的下限a和上限b:";
cin>>a>>b;
int n=50;//将区间划分成50份
float h=(b-a)/n;//h是每个区间分大小
float s=0;//s是矩形的面积的和
float i=0;
for(i=a;i s=s+((fun(i)+fun(i+h))*h)/2;
}
cout<<"\n结果是:"< cout< }
float fun(float x){
return pow(x,2);
}

#include
#include
using namespace std;
int main(){
float fun(float x);
float a,b;
cout<<"请输入函数X^2的定积分的下限a和上限b:";
cin>>a>>b;
int n=50;//将区间划分成50份
float h=(b-a)/n;//h是每个区间分大小
float s=0;//s是矩形的面积的和
float i=0;
for(i=a;i s=s+((fun(i)+fun(i+h))*h)/2;
}
cout<<"\n结果是:"< cout< }
float fun(float x){
return pow(x,2);
}


一个较复杂的例子
写一个通用函数,用来求sinx 、 cosx 、 e^x 、 x^2 的定积分

分析:fun为用来求定积分的通用函数,调用fun函数的时候,需要将积分的上限,下限,区间划分的份数以及被积函数的指针传递过来。


矩形法:


[cpp]
#include
#include
using namespace std;
int main(){
float fsin( float x);
float fcos( float x);
float fe( float x);
float fpf(float x);
float fun(float a,float b, int n,float (*p)(float x));
float a[4],b[4],r[4];
cout<<"请输入求正弦函数定积分的上限a和下限b:";
cin>>a[0]>>b[0];
r[0]=fun(a[0],b[0],50,fsin);
cout<<"\n结果是:"< cout<<"\n请输入求余弦函数定积分的上限a和下限b:";
cin>>a[1]>>b[1];
r[1]=fun(a[1],b[1],50,fcos);
cout<<"\n结果是:"< cout<<"\n请输入求以e为底的指数函数定积分的上限a和下限b:";
cin>>a[2]>>b[2];
r[2]=fun(a[2],b[2],50,fe);
cout<<"\n结果是:"< cout<<"\n请输入求X^2函数定积分的上限a和下限b:";
cin>>a[3]>>b[3];
r[3]=fun(a[3],b[3],50,fpf);
cout<<"\n结果是:"< cout< return 0;
}
float fsin(float x){
return sin(x);
}
float fcos(float x){
return cos(x);
}
float fe(float x){
return exp(x);
}
float fpf(float x){
return pow(x,2);
}
float fun(float a,float b,int n,float (*p)(float x)){
float i;
float h=(b-a)/n;
float s=0;
for(i=a;i s=s+p(i)*h;//利用了矩形求面积的公式
}
return s;
}

#include
#include
using namespace std;
int main(){
float fsin( float x);
float fcos( float x);
float fe( float x);
float fpf(float x);
float fun(float a,float b, int n,float (*p)(float x));
float a[4],b[4],r[4];
cout<<"请输入求正弦函数定积分的上限a和下限b:";
cin>>a[0]>>b[0];
r[0]=fun(a[0],b[0],50,fsin);
cout<<"\n结果是:"< cout<<"\n请输入求余弦函数定积分的上限a和下限b:";
cin>>a[1]>>b[1];
r[1]=fun(a[1],b[1],50,fcos);
cout<<"\n结果是:"< cout<<"\n请输入求以e为底的指数函数定积分的上限a和下限b:";
cin>>a[2]>>b[2];
r[2]=fun(a[2],b[2],50,fe);
cout<<"\n结果是:"< cout<<"\n请输入求X^2函数定积分的上限a和下限b:";
cin>>a[3]>>b[3];
r[3]=fun(a[3],b[3],50,fpf);
cout<<"\n结果是:"< cout< return 0;
}
float fsin(float x){
return sin(x);
}
float fcos(float x){
return cos(x);
}
float fe(float x){
return exp(x);
}
float fpf(float x){
return pow(x,2);
}
float fun(float a,float b,int n,float (*p)(float x)){
float i;
float h=(b-a)/n;
float s=0;
for(i=a;i s=s+p(i)*h;//利用了矩形求面积的公式
}
return s;
}

梯形法:


[cpp]
#include
#include
using namespace std;
int main(){
float fsin( float x);
float fcos( float x);
float fe( float x);
float fpf(float x);
float

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C/C++中程序在使用堆内存时的内存.. 下一篇hdu2066一个人的旅行

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)