gsl_integration_qagil(Func <double, double> f, double b, double epsabs, double epsrel, int limit, gsl_integration_workspace workspace, out double result, out double abserr, gsl_integration_rule q, bool bDebug) { //int status; // gsl_function f_transform; var transform_params = new il_params { b = b, f = f }; // f_transform.function = &il_transform; // f_transform.params = &transform_params; Func <double, double> f_transform = delegate(double t) { return(il_transform(t, transform_params)); }; GSL_ERROR status = qags(f_transform, 0.0, 1.0, epsabs, epsrel, limit, workspace, out result, out abserr, q, bDebug); return(status); }
il_transform(double t, il_params p) { //struct il_params *p = (struct il_params *) params; double b = p.b; Func <double, double> f = p.f; double x = b - (1 - t) / t; double y = f(x); return((y / t) / t); }