[Gsll-devel] Wrong argument names in set-minimizer-with-values function.

Evgeniy Zhemchugov jini.zh at gmail.com
Sun Aug 23 19:03:55 UTC 2009


According to GSL documentation at
http://www.gnu.org/software/gsl/manual/html_node/Initializing-the-Minimizer.html,
gsl_min_fminimizer_set_with_values has the following signature:

int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer * s,
gsl_function * f, double x_minimum, double f_minimum, double x_lower,
double f_lower, double x_upper, double f_upper)

GSLL set-fminimizer-with-values is defined as follows:

(defmfun set-fminimizer-with-values
    (minimizer function x-minimum x-lower x-upper
	       f-minimum f-lower f-upper)
  "gsl_min_fminimizer_set_with_values"
  (((mpointer minimizer) :pointer) (function :pointer)
   (x-minimum :double) (x-lower :double) (x-upper :double)
   (f-minimum :double) (f-lower :double) (f-upper :double))
  :documentation			; FDL
  "Set, or reset, an existing minimizer to use the
   function and the initial search interval [lower,
   upper], with a guess for the location of the minimum, using
   supplied rather than computed values of the function.")

Note the different order of argument names. I often use #'describe to
see function argument list and this discrepancy confuses me. Please,
apply the patch in the attachement.

Also, can you advice me on how to create a callback for this function?
The simplest solution I can come up with is the following:

(cffi:defcallback test :double ((x :double) (parameters :pointer))
  (1+ (cos x)))

(cffi:with-foreign-object (callback 'gsl::fnstruct)
  (setf (cffi:foreign-slot-value callback 'gsl::fnstruct 'function)
        (cffi:callback test))
  (let ((minimizer (gsl:make-one-dimensional-minimizer gsl:+brent-fminimizer+)))
    (gsl:set-fminimizer-with-values minimizer callback ...)
    ...))

But I don't like that the fnstruct symbol is not exported. What is the
supposed way?

It would be nice to be able to provide ordinary Lisp function as
callback for set-fminimizer-with-values instead of foreign pointer to
gsl_function. I do understand why it is difficult to make though.
Maybe you should use gsl_min_fminimizer_set_with_values instead of
gsl_min_fminimizer_set as is suggested by the comment in the
definition of one-dimensional-minimizer. GSL uses the latter function
as conventional interface for the former. In Lisp this can be handled
better via key arguments.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gsll_set-fminimizer-with-values_argument-names.patch
Type: application/octet-stream
Size: 1048 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/gsll-devel/attachments/20090823/04ecff49/attachment.obj>


More information about the gsll-devel mailing list