Тест хи-квадрат от gsl при интегрировании дает 0

Я пытаюсь вычислить многократное интегрирование, используя библиотеку gsl, но это кажется бесконечным, потому что значение chisq постоянно равно 0. Вот мой метод интегрирования:

double Integr::Fgg(double x_val, double k_val){

double result, error;
double bound_up[] = {2*M_PI, 2*M_PI, k_max, k_max};
double bound_down[] = {0,0,k_min, k_min};
const gsl_rng_type *T;
gsl_rng *r;

struct f_params params = {x_val, k_val};
gsl_monte_function Fgg = {&Integr::integrant_prot, 4, &params};
size_t calls = 5000;
gsl_rng_env_setup();
T = gsl_rng_default;
r = gsl_rng_alloc(T);

//warm up
gsl_monte_vegas_state *s = gsl_monte_vegas_alloc(4);
gsl_monte_vegas_integrate(&Fgg, bound_down, bound_up, 4, 1000, r, s, &result, &error);

//integration
do{
gsl_monte_vegas_integrate(&Fgg, bound_down, bound_up, 4, calls/5, r, s, &result, &error);
}while(fabs(s->chisq - 1.0)>0.5);

gsl_monte_vegas_free(s);
return result;
}

Кто-нибудь может сказать, почему это значение не меняется? Что-то не так с моим кодом или с использованием моего gsl? Я должен признать, что я новичок в gsl.

[редактировать] Интегральная функция:

double Integr::integrant_prot(double *args, size_t dim, void *params){

struct f_params *fp = (struct f_params *) params;
return Integr::integrantFgg(fp->x_val, fp->k_val, args[0], args[1], args[2], args[3]);
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]