A naive solution is to just return an arbitrary large value whenever the
inversion fails (one could imagine more complicated schemes involving
e.g. the determinant). I do this all the time because it happens to work
for my problems. However, the right way to do this is probably to rewrite the
minimizer in such a way as to "choose a different direction" if the
"step in the current direction" fails. In the case of the simplex algorithm
for example, one could just appropriately choose a new simplex and restart.
I'd lean towards rewriting the iterate() function for the minimizer this
way rather than setjmp() hax.

Take care,
Andrew

On Wed, Feb 20, 2008 at 11:27 AM, ddneilson <[EMAIL PROTECTED]> wrote:
>
>  Hello there,
>   I'm currently working on a smallish little project wherein I'm using
>  GSL's multidimensional minimization routines to find a local minima of a
>  function. The problem is that the evaluations of this function involve
>  finding the inverse of a positive semi-definite matrix via Cholesky
>  decomposition. That in itself isn't a big problem but, some parameter
>  values to the function cause the matrix to become ill-conditioned;
>  resulting in the Cholesky decomp throwing an error.
>
>   What I would like to do in these cases is bail out of the minimizer
>  since the only time this should happen is when the function doesn't have
>  a lower bound (I won't know there isn't a lower bound until I encounter
>  this problem). However, I can't seem to find a way to tell the multimin
>  functions to stop from within a call to the supplied f(), df() or fdf()
>  functions. Is this possible, or am I stuck with some sort of
>  thread-unsafe setjmp/longjmp hack to get out of this?
>
>  Thanks for your time,
>   Daniel
>
>
>  _______________________________________________
>  Help-gsl mailing list
>  [email protected]
>  http://lists.gnu.org/mailman/listinfo/help-gsl
>


_______________________________________________
Help-gsl mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-gsl

Reply via email to