Искам да използвам пакета Cubature C, за да изпълня многомерен интеграл на сложна функция. Опитах се да го направя по следния начин за много простата функция 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