C/C++计算一重定积分和二重定积分(纯暴力算法实现)

最近在复习考研数学,复习到积分这一块的时候手痒了,就手撸了计算定积分的算法程序

//============================================================================
// Name        : Integration.cpp
// Author      : xycode
// Version     :
// Copyright   : Your copyright notice
// Description : caculate integration
//============================================================================

#include <iostream>
#include <iomanip>
#include <math.h>
#define EPS 1e-7
using namespace std;
bool isEqual(double a,double b){
	if(fabs(a-b)<EPS){
		return true;
	}
	return false;
}

double function(double x){
	return x*x;
}

double function_2D(double x,double y){
	return x*y;
}

//计算一元函数的定积分
/**
 * a:积分下限
 * b:积分上限
 * 为了简便起见,保证b>a
 * f:积分函数
 * precision:精度等级,默认为100
 */
double caculate_integration(double a,double b,double(*f)(double x),int precision=100){
	double len=b-a;
	double interval=1.0/precision;
	unsigned long N=(unsigned long)len/interval;
	double result=0;
	for(unsigned long i=0;i<N;++i){
		result+=f(a+i*interval)*interval;
	}

	return result;

}

//计算二元函数的定积分,原理同上
double caculate_integration_2D(double ax,double bx,double ay,double by,
		double(*f)(double x,double y),int precision=1000){

	double lenx=bx-ax,leny=by-ay;
	double interval=1.0/precision;
	unsigned long Nx=lenx/interval,Ny=leny/interval;
	double result=0;
	for(unsigned long i=0;i<Nx;++i){
		for(unsigned long j=0;j<Ny;++j){
			result+=f(ax+i*interval,ay+j*interval)*(interval*interval);
		}
	}

	return result;

}

int main() {
	cout<<fixed<<setprecision(6);
	//理论值:791.66666666666666666666666666667
	cout<<caculate_integration(10.0,15.0,function)<<endl;
	cout<<caculate_integration(10.0,15.0,function,1000)<<endl;
	cout<<caculate_integration(10.0,15.0,function,10000)<<endl;

	cout<<caculate_integration(1.0,10.0,exp,10000)<<endl;


	//理论值:3,906.25
	cout<<caculate_integration_2D(10.0,15.0,10.0,15.0,function_2D)<<endl;

	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值