目的
今天突然闲来无事,打算用C++实现一个积分运算的功能,目前的很多科学计算语言,比如MATLAB和Python应该都是有这个运算的(并没有调研过),但是在百度上查了下,C++里面貌似没有相关的计算函数,所以本着锻炼技巧的目的就去写了一个。
过程
这里试了两个比较简单的函数:
1)y = x
2)y = x * x
按照数学上教的求积分公式,分别对应的积分式子为:
1)y = 1/2(x * x)
2)y = 1/3(x * x * x)
但其实从积分的原理上来说,其实就是在x轴上把曲线分成无穷多个小段,加在一起以后相当于求的是曲线在给定范围(x = x1,x = x2)内的面积大小,这个时候当delta取得足够小,可以看做f(x1+delta*n)*delta,接下来贴代码。
#include <iostream>
using namespace std;
double func1(double x){
return x;
}
double func2(double x){
return x*x;
}
double integral(double(*f)(double), double min, double max){
double result = 0;
const int N = 1000;
double delta = (max - min) / N;
for (double i = min+delta; i < max; i+=delta)
{
result += f(min+i)*delta;
}
return result;
}
int main(){
double result=0;
result = integral(func2, 0, 2.0);
cout << result << endl;
system("pause");
return 0;
}
当N取值为1000,也即是将长度为2的范围分成1000份,求出来的数值逼近理论数值。
顺便推广下个人的GitHub:luuuyi/Integral