您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-12 20:38 447 查看
最近在复习考研数学,复习到积分这一块的时候手痒了,就手撸了计算定积分的算法程序

//============================================================================
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 函数 数学