用矩形法求定积分的通用函数

来源:互联网 发布:大非农数据查询 编辑:程序博客网 时间:2024/05/07 13:34

 

2012-05-24 16:51:21|  分类:语言学习 |  标签:c/c++  |字号 订阅

float integral(float(*p)(float),float a,float b,int n)    
{
float x,h,s;
h=(b-a)/n;
x=a;
s=0;
for(int i=0;i<=n;i++)
{
x=x+h;
s=s+(*p)(x)*h;
}
return s;
}
float fsin(float x)
{return sin(x);}
int main()
{
float a,b,c,n,(*p)(float);
n=100000;
p=fexp;
c=integral(p,a,b,n);
cout<<c<<endl;
return 0;
}

p是指向函数的指针变量,定义形式为“float (*p)(float)”,表示p指向的函数有一个实型形参,p可指向返回值为实型的函数。在main函数中有“p=fsin”,表示将fsin函数的入口地址传递给形参p(形参p也定义为指向函数的指针变量),这样形参p也指向fexp函数,(*p)(x)相当于fsin(x)。fsin(x)的值就是sinx的值。因此通过调用integral函数求出了sinx的定积分。
用矩形法求定积分的通用函数 - 豆豆 - 豆豆的博客
此题的解题思路为:将求定积分转换成求一个不规则图形的面积。我们可以将一个图形看成类似图中所画的一个图形,当然,a和b可能都是曲线,为了便于理解,我将它们画成直线。要求积分,并且上限是b,下限是a,那么就是求以a为横坐标到以b为横坐标的这块图形的面积。首相将整个图形分成n块宽度相等的矩形。h=(b-a)/n;其实就是细线所画的矩形的宽,x=a;x=x+h;就是细线细线所画的矩形的横坐标,那么就能通过函数得到此横坐标对应的纵坐标,就是细线所画的矩形的高,长乘以宽就是面积,将所有的矩形的面积想加就得到了定积分的值。n越大,越趋于正确值。