1 /* Paraboloid centered on (p[0],p[1]), with
2 scale factors (p[2],p[3]) and minimum p[4] */
5 my_f (const gsl_vector *v, void *params)
8 double *p = (double *)params;
10 x = gsl_vector_get(v, 0);
11 y = gsl_vector_get(v, 1);
13 return p[2] * (x - p[0]) * (x - p[0]) +
14 p[3] * (y - p[1]) * (y - p[1]) + p[4];
17 /* The gradient of f, df = (df/dx, df/dy). */
19 my_df (const gsl_vector *v, void *params,
23 double *p = (double *)params;
25 x = gsl_vector_get(v, 0);
26 y = gsl_vector_get(v, 1);
28 gsl_vector_set(df, 0, 2.0 * p[2] * (x - p[0]));
29 gsl_vector_set(df, 1, 2.0 * p[3] * (y - p[1]));
32 /* Compute both f and df together. */
34 my_fdf (const gsl_vector *x, void *params,
35 double *f, gsl_vector *df)