gsl_integration_qagiu(Func <double, double> f, double a, 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 iu_params { a = a, f = f }; //f_transform.function = &iu_transform; //f_transform.params = &transform_params; Func <double, double> f_transform = delegate(double t) { return(iu_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); }
iu_transform(double t, iu_params p) { double a = p.a; Func <double, double> f = p.f; double x = a + (1 - t) / t; double y = f(x); return((y / t) / t); }
iu_transform(double t, iu_params p) { double a = p.a; Func<double, double> f = p.f; double x = a + (1 - t) / t; double y = f(x); return (y / t) / t; }
gsl_integration_qagiu(Func<double, double> f, double a, 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; iu_params transform_params = new iu_params(); transform_params.a = a; transform_params.f = f; //f_transform.function = &iu_transform; //f_transform.params = &transform_params; Func<double, double> f_transform = delegate(double t) { return iu_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; }