Mercurial > hg > octave-max
changeset 1937:4872b6022e6f
[project @ 1996-02-12 04:40:56 by jwe]
author | jwe |
---|---|
date | Mon, 12 Feb 1996 04:40:56 +0000 |
parents | 49f93fba6871 |
children | 126ebfbf3f99 |
files | liboctave/NLEqn.cc |
diffstat | 1 files changed, 26 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- 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<double> 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<double> wa (lwa); + double *pwa = wa.fortran_vec (); - F77_FCN (hybrj1, HYBRJ1) (hybrj1_fcn, n, px, fvec, fjac, n, tol, - info, wa, lwa); + Array<double> 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<double> 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<double> 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; }