C++程序设计(矩形法求定积分)

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

一、原理

思路就是将积分区间划分成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); }
 
四、 说明

sincosexp是系统提供的数学函数,在程序中定义3个函数fsinfcos

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)的定积分。求其余两个函数的定积分的情况与此类似。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值