Я хочу использовать пакет C Cubature для выполнения многомерного интеграла сложная функция. Я попытался сделать это следующим образом для очень простой функции f (x, y) = x + y * i над квадратом [0,1] x [0,1]. Точный результат - 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?
fval[0] = x[0]+x[1]*I;
мог успешно упаковать комплексное число в одинdouble
- person AakashM   schedule 28.05.2013