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;
}
//============================================================================
// 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;
}
相关文章推荐
- 数值计算:一重积分计算的C++实现
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- 数值作业:变步长梯形求积算法计算积分C语言实现
- c++通过运算符[]重载实现一重和二重数组
- Pid控制算法-变积分的pid算法的C++实现
- C++实现龙贝格计算积分
- 数值作业:龙贝格算法计算积分C语言实现
- C++实现龙贝格计算积分
- Pid控制算法-积分分离pid算法C++实现
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 数据结构复习:几种排序算法的C++实现和二叉树的相关算法实现
- 快速傅里叶变换(FFT)算法C++实现代码
- 算法(c++)实现
- 用C++实现warshall的算法
- [CodeProject每日一荐]实现Double Metaphone语音匹配算法[一]:介绍与C++实现
- 数值计算方法与算法:C语言实现利用Gauss消元法解方程组
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 算法如功夫——C++ 用递归函数计算n的阶乘n!
- 内存管理:算法及其c/c++实现 翻译六