diff liboctave/CmplxQRP.cc @ 3883:69b6bd271277

[project @ 2002-04-02 21:05:10 by jwe]
author jwe
date Tue, 02 Apr 2002 21:05:10 +0000
parents 8b262e771614
children 7da18459c08b
line wrap: on
line diff
--- a/liboctave/CmplxQRP.cc
+++ b/liboctave/CmplxQRP.cc
@@ -68,7 +68,8 @@
       return;
     }
 
-  Array<Complex> tau (m < n ? m : n);
+  int min_mn = m < n ? m : n;
+  Array<Complex> tau (min_mn);
   Complex *ptau = tau.fortran_vec ();
 
   int lwork = 3*n > 32*m ? 3*n : 32*m;
@@ -78,7 +79,7 @@
   int info = 0;
 
   ComplexMatrix A_fact = a;
-  if (m > n)
+  if (m > n && qr_type != QR::economy)
     A_fact.resize (m, m, 0.0);
 
   Complex *tmp_data = A_fact.fortran_vec ();
@@ -114,13 +115,13 @@
 	    p.elem (jpvt.elem (j) - 1, j) = 1.0;
 	}
 
+      int n2 = (qr_type == QR::economy) ? min_mn : m;
+
       if (qr_type == QR::economy && m > n)
 	r.resize (n, n, 0.0);
       else
 	r.resize (m, n, 0.0);
 
-      int min_mn = m < n ? m : n;
-
       for (int j = 0; j < n; j++)
 	{
 	  int limit = j < min_mn-1 ? j : min_mn-1;
@@ -128,10 +129,6 @@
 	    r.elem (i, j) = A_fact.elem (i, j);
 	}
 
-      int n2 = m;
-      if (qr_type == QR::economy)
-	n2 = min_mn;
-
       F77_XFCN (zungqr, ZUNGQR, (m, n2, min_mn, tmp_data, m, ptau,
 				 pwork, lwork, info));