static VALUE Diff_forward(VALUE self, VALUE f, VALUE x) { int ret; gsl_function * ptr; double abserr, result; Data_Get_Struct(f, gsl_function, ptr); ret = gsl_diff_forward(ptr, NUM2DBL(x), &result, &abserr); return rb_ary_new3(2, rb_float_new(result), rb_float_new(abserr)); }
int main () { gsl_function F; double result, abserr; F.function = &f ; F.params = 0; printf("f(x) = x^(3/2)\n\n") ; gsl_diff_central (&F, 2.0, &result, &abserr); printf("x = 2.0\n"); printf("derivative = %.10f +/- %.5f\n", result, abserr); printf("exact = %.10f\n\n", 1.5 * sqrt(2.0)); gsl_diff_forward (&F, 0.0, &result, &abserr); printf("x = 0.0\n"); printf("derivative = %.10f +/- %.5f\n", result, abserr); printf("exact = %.10f\n", 0.0); }