diff options
Diffstat (limited to 'packages/gsl/src/Numeric/GSL/gsl-aux.c')
-rw-r--r-- | packages/gsl/src/Numeric/GSL/gsl-aux.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/packages/gsl/src/Numeric/GSL/gsl-aux.c b/packages/gsl/src/Numeric/GSL/gsl-aux.c index e1b189c..1ca8199 100644 --- a/packages/gsl/src/Numeric/GSL/gsl-aux.c +++ b/packages/gsl/src/Numeric/GSL/gsl-aux.c | |||
@@ -36,6 +36,8 @@ | |||
36 | #include <gsl/gsl_roots.h> | 36 | #include <gsl/gsl_roots.h> |
37 | #include <gsl/gsl_spline.h> | 37 | #include <gsl/gsl_spline.h> |
38 | #include <gsl/gsl_multifit_nlin.h> | 38 | #include <gsl/gsl_multifit_nlin.h> |
39 | #include <gsl/gsl_siman.h> | ||
40 | |||
39 | #include <string.h> | 41 | #include <string.h> |
40 | #include <stdio.h> | 42 | #include <stdio.h> |
41 | 43 | ||
@@ -475,7 +477,30 @@ int uniMinimize(int method, double f(double), | |||
475 | OK | 477 | OK |
476 | } | 478 | } |
477 | 479 | ||
478 | 480 | int siman(int seed, | |
481 | gsl_siman_params_t *params, void *xp0, | ||
482 | double energy(void *), double metric(void *, void *), | ||
483 | void step(const gsl_rng *, void *, double), | ||
484 | void copy(void *, void *), void *copycons(void *), | ||
485 | void destroy(void *), void print(void *)) { | ||
486 | DEBUGMSG("siman"); | ||
487 | gsl_rng *gen = gsl_rng_alloc (gsl_rng_mt19937); | ||
488 | gsl_rng_set(gen, seed); | ||
489 | |||
490 | // The simulated annealing routine doesn't indicate with a return | ||
491 | // code how things went -- there's little notion of convergence for | ||
492 | // a randomized minimizer on a potentially non-convex problem, and I | ||
493 | // suppose it doesn't detect egregious failures like malloc errors | ||
494 | // in the copy-constructor. | ||
495 | gsl_siman_solve(gen, xp0, | ||
496 | energy, step, | ||
497 | metric, print, | ||
498 | copy, copycons, | ||
499 | destroy, 0, *params); | ||
500 | |||
501 | gsl_rng_free(gen); | ||
502 | OK | ||
503 | } | ||
479 | 504 | ||
480 | // this version returns info about intermediate steps | 505 | // this version returns info about intermediate steps |
481 | int minimize(int method, double f(int, double*), double tolsize, int maxit, | 506 | int minimize(int method, double f(int, double*), double tolsize, int maxit, |