I've read through the root-finding documentation, but didn't find a reference to this case. Any assistance would be appreciated.
Summary: I get "gsl: lu.c:147: ERROR: matrix is singular" when tying to find the zeros of a function from R^n -> R using the functionality in gsl_multiroots.h. How should I proceed? Details: I'm trying to find the zeros of mufti dimensional (anywhere from 2 to 1500 degrees of freedom) potential-energy-type functions, which map vectors to scalars. To that end, I started trying to set up the gsl_multiroot_function_fdf struct for use with the Newton-Raphson solver. However, when implementing int (* df) (const gsl_vector * x, void * params, gsl_matrix * J) to produce the Jacobian, I was concerned. Because my function is scalar valued only the the first row of partial derivatives has any meaning. I used code like this: //only row 0 has non-zero elements gsl_matrix_set_all (J, 0.0); //grad is a gsl_vector * containing the gradient gsl_matrix_set_row (J, (size_t) 0, grad); to input the part of the Jacobian that exists. I used similar code for the function itself: //all elements but the first are 0 gsl_vector_set_all (f, 0.0); // energy is a double holding the value of the function gsl_vector_set (f, (size_t) 0, energy); I filled the vector with 0 and wrote the first element with the function's value. My code compiles without warnings or errors using the recommend (gsl manual A.4 [1]) flags with gcc. However, when executing, I get the following error: $ ./a.out gsl: lu.c:147: ERROR: matrix is singular Default GSL error handler invoked. Aborted How should I express my function so I can avoid this? Thanks very much, vale [1] http://www.gnu.org/software/gsl/manual/html_node/GCC-warning-options-for-numerical-programs.html -- Vale Cofer-Shabica Department of Chemistry, Brown University [email protected] 401.267.8253
