问题描述
#include <complex>
#include <iostream>
using namespace std;
complex<double> integral(complex<double> (*f)(complex<double> const &x),complex<double> l,complex<double> u,size_t n)
{
complex<double> step = (u - l) / (double) n;
complex<double> area(0,0);
for (size_t i = 0; i < n; i++) {
complex<double> inner = l + (i + 0.5) * step;
area = area + f(inner) / inner * step;
}
return area;
}
int main()
{
complex<double> l(0,0);
complex<double> u(2,1);
cout << integral(cos,l,u,100);
}
我得到这个输出 (5.77123,-0.761154)
这个函数的积分是sin(i+2)=(1.403-0.489i) wolframalpha
我不知道可能是什么问题。
解决方法
正如评论中所说,除以 inner
是一个无关紧要的步骤。
complex<double> integral(complex<double> (*f)(complex<double> const &x),complex<double> l,complex<double> u,size_t n)
{
complex<double> step = (u - l) / (double) n;
complex<double> area(0,0);
for (size_t i = 0; i < n; i++) {
complex<double> inner = l + (i + 0.5) * step;
area += f(inner) * step;
}
return area;
}