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 で複雑な関数の積分を計算するより良い方法を知っていますか?