50double my_f (
double x,
void *p) {
52 gsl_complex z = gsl_complex_add(gsl_complex_rect(params->
a, 0),
53 gsl_complex_polar(params->
r, x));
54 gsl_complex z1 = gsl_complex_div(gsl_complex_add(z,
55 gsl_complex_rect(params->
s0, 0)),
57 gsl_complex z2 = gsl_complex_div(gsl_complex_sub(z,
58 gsl_complex_rect(params->
s0, 0)),
60 gsl_complex func = gsl_complex_div(gsl_complex_sub(gsl_complex_tanh(z1),
61 gsl_complex_tanh(z2)),
62 gsl_complex_rect(2, 0));
63 func = gsl_complex_mul(func, gsl_complex_polar(1, -params->
n * x));
64 return gsl_sf_fact(params->
n) * GSL_REAL(func)
70 const double &lambdaleft,
71 const double &lambdaright,
74 double radius = gsl_hypot(
a - 2, lambdaright *
Physics::pi / 2) - 0.01;
75 double radius2 = gsl_hypot(
a + 2, lambdaleft *
Physics::pi / 2) - 0.01;
76 if (radius > radius2) radius = radius2;
77 my_f_params params = {
a, s0, lambdaleft, lambdaright, radius, n};
80 gsl_integration_workspace *w = gsl_integration_workspace_alloc(100);
81 double error = gsl_sf_pow_int(10, -12);
84 gsl_set_error_handler_off();
86 100, GSL_INTEG_GAUSS61, w, &result, &abserr);
87 gsl_integration_workspace_free(w);