在 C++ 中使用梯形规则对复数进行积分

问题描述

#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;
}

See live