Mercurial > hg > octave-nkf
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));