矩形法求定积分的通用函数
文章目录
一、原理
思路就是将积分区间划分成n等份,然后将这n等份近似看成矩形(或梯形),然后对所有的矩形
(或梯形)的面积进行求和。
二、方法
可以看出:每次需要求定积分的函数是不一样的。可以编写一个求定积分的通用函数integral,
它有3个形参:下限a、上限b以及指向函数的指针变量 fun。函数原型可写为:
float integral (float a, float b,float (*fun)());
先后调用integral函数5次,每次调用时把a,b以及sin,cos,exp 之一作为实参,把上
限、下限以及有关函数的入口地址传送给形参fun。在执行integral函数过程中求出定积分的
值。根据以上思路,编写出程序。
三、 代码实现
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float integral(float (*p)(float),float a,float b,int n);
float fsin(float x);
float fcos(float x);
float fexp(float x);
float a1,b1,a2,b2,a3,b3,result,(*p)(float);
int n=1000; //这里将定积分以x轴划分了1000份(划分的越多,所得的值越精确)
cout<<"intput the upper and lower limit of sin(x) :"<<' ';
cin>>a1>>b1;
cout<<"intput the limit of cos(x) :"<<' ';
cin>>a2>>b2;
cout<<"intput the limit of exp(x) :"<<' ';
cin>>a3>>b3;
p=fsin; //使p指针指向fsin函数,便于后续函数的调用
result=integral(p,a1,b1,n);
cout<<"The integral of sin(x) is:"<<result<<endl;
p=fcos;
result=integral(p,a2,b2,n);
cout<<"The integral of cos(x) is:"<<result<<endl;
p=fexp;
result=integral(p,a3,b3,n);
cout<<"The integral of exp(x) is:"<<result<<endl;
return 0;
}
float integral(float(*p)(float),float a,float b,int n) //用矩形法求定积分的通用函数
{
float x,d,s=0;
if(a<b) {
int k; //确保上下限的正确性
k=a;a=b;b=k;
}
d=(a-b)/n;
x=b;
for(int i=0;i<n;i++)
{
x=x+d;
s=s+(*p)(x)*d; //将求出来的每个矩形面积累加即可
}
return (s);
}
float fsin(float x)
{
return sin(x); }
float fcos(float x)
{
return cos(x); }
float fexp(float x)
{
return exp(x); }
四、 说明
sin,cos和exp是系统提供的数学函数,在程序中定义3个函数fsin,fcos和
fexp分别用来计算sin(x),cos(x)和 exp(x)的值,在main函数中要对这3个函数作声明。在main
函数中定义p为指向函数的指针变量,定义形式是“float(*p)(float)”,表示p指向的函数有一个实型形
参,p可指向返回值为实型的函数。
在main函数中有“p=fsin;”,表示将fsin函数的入口地址上赋给p,在调用integral函数时,用p作
为实参,把fsin函数的入口地址传递给形参p(形参p也定义为指向函数的指针变量),这样形参p也指
向fsin函数,(*p)(x)就相当于fsin(x)。fsin(x)的值就是sin(x)的值。因此通过调用 integral 函数求
出 sin(x)的定积分。求其余两个函数的定积分的情况与此类似。