我想使用Cubature C 包来执行复杂函数的多维积分。对于正方形 [0,1]x[0,1] 上的非常简单的函数 f(x,y) = x + y*i,我尝试按以下方式执行此操作。确切的结果是 0.5 + 0.5i。
#include <stdio.h>
#include <math.h>
#include <complex.h>
#include "../cubature.h"
int f(unsigned ndim, const double *x, void *fdata, unsigned fdim, double *fval);
int main(void)
{
double xmin[2] = {0,0}, xmax[2] = {1,1}, val, err;
hcubature(1, f, NULL, 2, xmin, xmax, 0, 0, 1e-3, ERROR_PAIRED, &val, &err);
printf("Computed integral = %f+%fi +/- %f\n", creal(val),cimag(val), err);
}
int f(unsigned ndim, const double *x, void *fdata, unsigned fdim, double *fval)
{
fval[0] = x[0]+x[1]*I;
return 0;
}
但我得到的是Computed integral = 0.500000+0.000000i +/- 0.000000
,那是虚部没有出现。如果我放一个纯虚被积函数(例如 x*i),我总是得到 0 作为结果。
我究竟做错了什么?你知道在 C 中计算复杂函数积分的更好方法吗?