# HG changeset patch # User jwe # Date 824100056 0 # Node ID 4872b6022e6f4b2a2dc2258db1881e29e1d104c5 # Parent 49f93fba68715001b66f411a325e4db405da34f9 [project @ 1996-02-12 04:40:56 by jwe] diff --git a/liboctave/NLEqn.cc b/liboctave/NLEqn.cc --- a/liboctave/NLEqn.cc +++ b/liboctave/NLEqn.cc @@ -144,47 +144,48 @@ double tol = tolerance (); - double *fvec = new double [n]; - double *px = new double [n]; - for (int i = 0; i < n; i++) - px[i] = x.elem (i); + retval = x; + double *px = retval.fortran_vec (); user_fun = fun; user_jac = jac; if (jac) { + Array fvec (n); + double *pfvec = fvec.fortran_vec (); + int lwa = (n*(n+13))/2; - double *wa = new double [lwa]; - double *fjac = new double [n*n]; + Array wa (lwa); + double *pwa = wa.fortran_vec (); - F77_FCN (hybrj1, HYBRJ1) (hybrj1_fcn, n, px, fvec, fjac, n, tol, - info, wa, lwa); + Array fjac (n*n); + double *pfjac = fjac.fortran_vec (); - delete [] wa; - delete [] fjac; + F77_XFCN (hybrj1, HYBRJ1, (hybrj1_fcn, n, px, pfvec, pfjac, n, + tol, info, pwa, lwa)); + + if (f77_exception_encountered) + (*current_liboctave_error_handler) ("unrecoverable error in hybrj1"); } else { - int lwa = (n*(3*n+13))/2; - double *wa = new double [lwa]; + Array fvec (n); + double *pfvec = fvec.fortran_vec (); - F77_FCN (hybrd1, HYBRD1) (hybrd1_fcn, n, px, fvec, tol, info, - wa, lwa); + int lwa = (n*(3*n+13))/2; + Array wa (lwa); + double *pwa = wa.fortran_vec (); - delete [] wa; + F77_XFCN (hybrd1, HYBRD1, (hybrd1_fcn, n, px, pfvec, tol, info, + pwa, lwa)); + + if (f77_exception_encountered) + (*current_liboctave_error_handler) ("unrecoverable error in hybrd1"); } - if (info >= 0) - { - retval.resize (n); - - for (int i = 0; i < n; i++) - retval.elem (i) = px[i]; - } - - delete [] fvec; - delete [] px; + if (info < 0) + retval.resize (0); return retval; }