changeset 253:e208bd9ade36

[project @ 1993-12-06 22:01:37 by jwe]
author jwe
date Mon, 06 Dec 1993 22:01:37 +0000
parents bc5e6cb785d1
children c9894e8d5f04
files liboctave/NLEqn.cc
diffstat 1 files changed, 37 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }