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

    xiaoxiao2021-03-25  56

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

    //============================================================================ // 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; }

    转载请注明原文地址: https://ju.6miu.com/read-37023.html

    最新回复(0)