I forgot to attach the patch.

diff -u orig/gsl-1.8/multimin/fminimizer.c gsl-1.8/multimin/fminimizer.c
--- orig/gsl-1.8/multimin/fminimizer.c  2005-06-26 14:25:35.000000000 +0100
+++ gsl-1.8/multimin/fminimizer.c       2008-09-29 02:07:29.000000000 +0100
@@ -90,7 +90,9 @@
 
   gsl_vector_memcpy (s->x,x);
 
-  return (s->type->set) (s->state, s->f, s->x, &(s->size), step_size);
+  s->simplex_size_valid = 0;
+
+  return (s->type->set) (s->state, s->f, s->x, step_size);
 }
 
 void
@@ -105,7 +107,9 @@
 int
 gsl_multimin_fminimizer_iterate (gsl_multimin_fminimizer * s)
 {
-  return (s->type->iterate) (s->state, s->f, s->x, &(s->size), &(s->fval));
+  s->simplex_size_valid = 0;
+
+  return (s->type->iterate) (s->state, s->f, s->x, &(s->fval));
 }
 
 const char * 
@@ -128,7 +132,12 @@
 }
 
 double
-gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * s)
+gsl_multimin_fminimizer_size (gsl_multimin_fminimizer * s)
 {
-  return s->size;
+  if (!s->simplex_size_valid)
+    {
+      s->simplex_size = (s->type->get_size) (s->state);
+      s->simplex_size_valid = 1;
+    }
+  return s->simplex_size;
 }
Only in gsl-1.8/multimin: fminimizer.c~
diff -u orig/gsl-1.8/multimin/gsl_multimin.h gsl-1.8/multimin/gsl_multimin.h
--- orig/gsl-1.8/multimin/gsl_multimin.h        2005-06-26 14:25:35.000000000 
+0100
+++ gsl-1.8/multimin/gsl_multimin.h     2008-09-29 02:08:17.000000000 +0100
@@ -84,13 +84,12 @@
   int (*alloc) (void *state, size_t n);
   int (*set) (void *state, gsl_multimin_function * f,
               const gsl_vector * x, 
-              double * size,
               const gsl_vector * step_size);
   int (*iterate) (void *state, gsl_multimin_function * f, 
                   gsl_vector * x, 
-                  double * size,
                   double * fval);
   void (*free) (void *state);
+  double (*get_size) (void *state);
 }
 gsl_multimin_fminimizer_type;
 
@@ -103,7 +102,8 @@
   double fval;
   gsl_vector * x;
   
-  double size;
+  int simplex_size_valid;
+  double simplex_size;
 
   void *state;
 }
@@ -135,7 +135,7 @@
 gsl_multimin_fminimizer_minimum (const gsl_multimin_fminimizer * s);
 
 double
-gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * s);
+gsl_multimin_fminimizer_size (gsl_multimin_fminimizer * s);
 
 /* Convergence test functions */
 
Only in gsl-1.8/multimin: gsl_multimin.h~
diff -u orig/gsl-1.8/multimin/simplex.c gsl-1.8/multimin/simplex.c
--- orig/gsl-1.8/multimin/simplex.c     2005-06-26 14:25:35.000000000 +0100
+++ gsl-1.8/multimin/simplex.c  2008-09-29 02:01:18.000000000 +0100
@@ -150,8 +150,10 @@
 }
 
 static double
-nmsimplex_size (nmsimplex_state_t * state)
+nmsimplex_get_size (void *vstate)
 {
+  nmsimplex_state_t *state = (nmsimplex_state_t *) vstate;
+
   /* calculates simplex size as average sum of length of vectors 
      from simplex center to corner points:     
 
@@ -218,7 +220,7 @@
 static int
 nmsimplex_set (void *vstate, gsl_multimin_function * f,
                const gsl_vector * x,
-               double *size, const gsl_vector * step_size)
+               const gsl_vector * step_size)
 {
   int status;
   size_t i;
@@ -252,10 +254,6 @@
       gsl_vector_set (state->y1, i + 1, val);
     }
 
-  /* Initialize simplex size */
-
-  *size = nmsimplex_size (state);
-
   return GSL_SUCCESS;
 }
 
@@ -272,7 +270,7 @@
 
 static int
 nmsimplex_iterate (void *vstate, gsl_multimin_function * f,
-                   gsl_vector * x, double *size, double *fval)
+                   gsl_vector * x, double *fval)
 {
 
   /* Simplex iteration tries to minimize function f value */
@@ -395,10 +393,6 @@
   gsl_matrix_get_row (x, x1, lo);
   *fval = gsl_vector_get (y1, lo);
 
-  /* Update simplex size */
-
-  *size = nmsimplex_size (state);
-
   return GSL_SUCCESS;
 }
 
@@ -408,7 +402,8 @@
   &nmsimplex_alloc,
   &nmsimplex_set,
   &nmsimplex_iterate,
-  &nmsimplex_free
+  &nmsimplex_free,
+  &nmsimplex_get_size
 };
 
 const gsl_multimin_fminimizer_type
Only in gsl-1.8/multimin: simplex.c~



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to