diff liboctave/EIG.cc @ 3585:d9803711e047

[project @ 2000-02-08 04:35:39 by jwe]
author jwe
date Tue, 08 Feb 2000 04:35:47 +0000
parents 09a3064a3a17
children 7da18459c08b
line wrap: on
line diff
--- a/liboctave/EIG.cc
+++ b/liboctave/EIG.cc
@@ -160,7 +160,7 @@
   Matrix atmp = a;
   double *tmp_data = atmp.fortran_vec ();
 
-  Array<double> wr (n);
+  ColumnVector wr (n);
   double *pwr = wr.fortran_vec ();
 
   // XXX FIXME XXX -- it might be possible to choose a better value of
@@ -175,19 +175,12 @@
 
   if (f77_exception_encountered || info < 0)
     (*current_liboctave_error_handler) ("unrecoverable error in dsyev");
+  else if (info > 0)
+    (*current_liboctave_error_handler) ("dsyev failed to converge");
   else
     {
-      if (info > 0)
-	(*current_liboctave_error_handler) ("dsyev failed to converge");
-      else
-	{
-	  lambda.resize (n);
-
-	  for (int j = 0; j < n; j++)
-	    lambda.elem (j) = Complex (wr.elem (j));
-
-	  v = atmp;
-	}
+      lambda = ComplexColumnVector (wr);
+      v = ComplexMatrix (atmp);
     }
 
   return info;
@@ -264,8 +257,8 @@
   ComplexMatrix atmp = a;
   Complex *tmp_data = atmp.fortran_vec ();
 
-  ColumnVector w (n);
-  double *pw = w.fortran_vec ();
+  ColumnVector wr (n);
+  double *pwr = wr.fortran_vec ();
 
   // XXX FIXME XXX -- it might be possible to choose a better value of
   // lwork that would result in more efficient computations.
@@ -278,7 +271,7 @@
   Array<double> rwork (lrwork);
   double *prwork = rwork.fortran_vec ();
 
-  F77_XFCN (zheev, ZHEEV, ("V", "U", n, tmp_data, n, pw, pwork,
+  F77_XFCN (zheev, ZHEEV, ("V", "U", n, tmp_data, n, pwr, pwork,
 			   lwork, prwork, info, 1L, 1L));
 
   if (f77_exception_encountered || info < 0)
@@ -287,8 +280,8 @@
     (*current_liboctave_error_handler) ("zheev failed to converge");
   else
     {
-      lambda = w;
-      v = atmp;
+      lambda = ComplexColumnVector (wr);
+      v = ComplexMatrix (atmp);
     }
 
   return info;