# HG changeset patch # User jwe # Date 755215297 0 # Node ID e208bd9ade3678154b82838c25953fa27d6f401b # Parent bc5e6cb785d1923701ba4e07201b357b008c2dac [project @ 1993-12-06 22:01:37 by jwe] diff -r bc5e6cb785d1 -r e208bd9ade36 liboctave/NLEqn.cc --- a/liboctave/NLEqn.cc Mon Dec 06 21:57:51 1993 +0000 +++ b/liboctave/NLEqn.cc Mon Dec 06 22:01:37 1993 +0000 @@ -33,12 +33,13 @@ extern "C" { - int F77_FCN (hybrd1) (int (*)(), const int*, double*, double*, - const double*, int*, double*, const int*); + int F77_FCN (hybrd1) (int (*)(int*, double*, double*, int*), + const int*, double*, double*, const double*, + int*, double*, const int*); - int F77_FCN (hybrj1) (int (*)(), const int*, double*, double*, - double*, const int*, const double*, int*, - double*, const int*); + int F77_FCN (hybrj1) (int (*)(int*, double*, double*, double*, int*, int*), + const int*, double*, double*, double*, const int*, + const double*, int*, double*, const int*); } static nonlinear_fcn user_fun; @@ -143,8 +144,13 @@ tmp_f = (*user_fun) (tmp_x); - for (i = 0; i < nn; i++) - fvec[i] = tmp_f.elem (i); + if (tmp_f.length () == 0) + *iflag = -1; + else + { + for (i = 0; i < nn; i++) + fvec[i] = tmp_f.elem (i); + } return 0; } @@ -166,8 +172,13 @@ tmp_f = (*user_fun) (tmp_x); - for (i = 0; i < nn; i++) - fvec[i] = tmp_f.elem (i); + if (tmp_f.length () == 0) + *iflag = -1; + else + { + for (i = 0; i < nn; i++) + fvec[i] = tmp_f.elem (i); + } } else { @@ -175,10 +186,15 @@ tmp_fj = (*user_jac) (tmp_x); - int ld = *ldfjac; - for (int j = 0; j < nn; j++) - for (i = 0; i < nn; i++) - fjac[j*ld+i] = tmp_fj.elem (i, j); + if (tmp_fj.rows () == 0 || tmp_fj.columns () == 0) + *iflag = -1; + else + { + int ld = *ldfjac; + for (int j = 0; j < nn; j++) + for (i = 0; i < nn; i++) + fjac[j*ld+i] = tmp_fj.elem (i, j); + } } return 0; @@ -227,12 +243,17 @@ delete [] fjac; } + Vector retval; + info = tmp_info; - Vector retval (n); + if (info >= 0) + { + retval.resize (n); - for (i = 0; i < n; i++) - retval.elem (i) = px[i]; + for (i = 0; i < n; i++) + retval.elem (i) = px[i]; + } return retval; }