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

来源:互联网 发布:推理游戏 知乎 编辑:程序博客网 时间:2024/05/29 03:10

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

//============================================================================// Name        : Integration.cpp// Author      : xycode// Version     :// Copyright   : Your copyright notice// Description : caculate integration//============================================================================#include <iostream>#include <iomanip>#include <math.h>#define EPS 1e-7using 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.66666666666666666666666666667cout<<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.25cout<<caculate_integration_2D(10.0,15.0,10.0,15.0,function_2D)<<endl;return 0;}


0 0
原创粉丝点击