# HG changeset patch # User jwe # Date 824074767 0 # Node ID e379c781ae7eda53697b5633df41f823387f81e2 # Parent 3ce2c289c9781ea04be1bfe4dc9aa35237ed8e7c [project @ 1996-02-11 21:39:27 by jwe] diff -r 3ce2c289c978 -r e379c781ae7e liboctave/CmplxQR.cc --- a/liboctave/CmplxQR.cc Sun Feb 11 21:25:35 1996 +0000 +++ b/liboctave/CmplxQR.cc Sun Feb 11 21:39:27 1996 +0000 @@ -47,10 +47,6 @@ ComplexQR::ComplexQR (const ComplexMatrix& a, QR::type qr_type) { - tau = 0; - work = 0; - tmp_data = 0; - int m = a.rows (); int n = a.cols (); @@ -62,25 +58,28 @@ } int min_mn = m < n ? m : n; - tau = new Complex[min_mn]; + + Array tau (min_mn); + Complex *ptau = tau.fortran_vec (); int lwork = 32*n; - work = new Complex[lwork]; + Array work (lwork); + Complex *pwork = work.fortran_vec (); int info = 0; + ComplexMatrix A_fact; if (m > n) { - tmp_data = new Complex [m*m]; - copy (tmp_data, a.data (), a.length ()); + A_fact.resize (m, m); + A_fact.insert (a, 0, 0); } else - tmp_data = dup (a.data (), a.length ()); + A_fact = a; - F77_XFCN (zgeqrf, ZGEQRF, (m, n, tmp_data, m, tau, work, lwork, info)); + Complex *tmp_data = A_fact.fortran_vec (); - delete [] work; - work = 0; + F77_XFCN (zgeqrf, ZGEQRF, (m, n, tmp_data, m, ptau, pwork, lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) ("unrecoverable error in zgeqrf"); @@ -92,7 +91,7 @@ { int limit = j < min_mn - 1 ? j : min_mn - 1; for (int i = limit + 1; i < m; i++) - tmp_data[m*j+i] *= tau[j]; + A_fact.elem (i, j) *= tau.elem (j); } } else @@ -114,17 +113,15 @@ { int limit = j < min_mn-1 ? j : min_mn-1; for (int i = 0; i <= limit; i++) - r.elem (i, j) = tmp_data[m*j+i]; + r.elem (i, j) = A_fact.elem (i, j); } lwork = 32*m; - work = new Complex[lwork]; + work.resize (lwork); + Complex *pwork = work.fortran_vec (); - F77_XFCN (zungqr, ZUNGQR, (m, m, min_mn, tmp_data, m, tau, work, - lwork, info)); - - delete [] work; - work = 0; + F77_XFCN (zungqr, ZUNGQR, (m, m, min_mn, tmp_data, m, ptau, + pwork, lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) @@ -132,17 +129,10 @@ else { q = ComplexMatrix (tmp_data, m, m); - tmp_data = 0; q.resize (m, n2); } } } - - delete [] tau; - tau = 0; - - delete [] tmp_data; - tmp_data = 0; } /* diff -r 3ce2c289c978 -r e379c781ae7e liboctave/CmplxQR.h --- a/liboctave/CmplxQR.h Sun Feb 11 21:25:35 1996 +0000 +++ b/liboctave/CmplxQR.h Sun Feb 11 21:39:27 1996 +0000 @@ -38,7 +38,7 @@ { public: - ComplexQR (void) : q (), r (), tau (0), work (0), tmp_data (0) { } + ComplexQR (void) : q (), r () { } ComplexQR (const ComplexMatrix& A, QR::type qr_type = QR::std); @@ -54,12 +54,7 @@ return *this; } - ~ComplexQR (void) - { - delete [] tau; - delete [] work; - delete [] tmp_data; - } + ~ComplexQR (void) { } ComplexMatrix Q (void) const { return q; } ComplexMatrix R (void) const { return r; } @@ -70,10 +65,6 @@ ComplexMatrix q; ComplexMatrix r; - - Complex *tau; - Complex *work; - Complex *tmp_data; }; #endif diff -r 3ce2c289c978 -r e379c781ae7e liboctave/dbleQR.cc --- a/liboctave/dbleQR.cc Sun Feb 11 21:25:35 1996 +0000 +++ b/liboctave/dbleQR.cc Sun Feb 11 21:39:27 1996 +0000 @@ -47,10 +47,6 @@ QR::QR (const Matrix& a, QR::type qr_type) { - tau = 0; - work = 0; - tmp_data = 0; - int m = a.rows (); int n = a.cols (); @@ -61,25 +57,27 @@ } int min_mn = m < n ? m : n; - tau = new double[min_mn]; + Array tau (min_mn); + double *ptau = tau.fortran_vec (); int lwork = 32*n; - work = new double[lwork]; + Array work (lwork); + double *pwork = work.fortran_vec (); int info = 0; + Matrix A_fact; if (m > n) { - tmp_data = new double [m*m]; - copy (tmp_data, a.data (), a.length ()); + A_fact.resize (m, m); + A_fact.insert (a, 0, 0); } else - tmp_data = dup (a.data (), a.length ()); + A_fact = a; - F77_XFCN (dgeqrf, DGEQRF, (m, n, tmp_data, m, tau, work, lwork, info)); + double *tmp_data = A_fact.fortran_vec (); - delete [] work; - work = 0; + F77_XFCN (dgeqrf, DGEQRF, (m, n, tmp_data, m, ptau, pwork, lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) ("unrecoverable error in dgeqrf"); @@ -91,7 +89,7 @@ { int limit = j < min_mn - 1 ? j : min_mn - 1; for (int i = limit + 1; i < m; i++) - tmp_data[m*j+i] *= tau[j]; + A_fact.elem (i, j) *= tau.elem (j); } } else @@ -117,13 +115,11 @@ } lwork = 32*m; - work = new double[lwork]; + work.resize (lwork); + double *pwork = work.fortran_vec (); - F77_XFCN (dorgqr, DORGQR, (m, m, min_mn, tmp_data, m, tau, work, - lwork, info)); - - delete [] work; - work = 0; + F77_XFCN (dorgqr, DORGQR, (m, m, min_mn, tmp_data, m, ptau, + pwork, lwork, info)); if (f77_exception_encountered) (*current_liboctave_error_handler) @@ -131,17 +127,10 @@ else { q = Matrix (tmp_data, m, m); - tmp_data = 0; q.resize (m, n2); } } } - - delete [] tau; - tau = 0; - - delete [] tmp_data; - tmp_data = 0; } /* diff -r 3ce2c289c978 -r e379c781ae7e liboctave/dbleQR.h --- a/liboctave/dbleQR.h Sun Feb 11 21:25:35 1996 +0000 +++ b/liboctave/dbleQR.h Sun Feb 11 21:39:27 1996 +0000 @@ -44,7 +44,7 @@ economy, }; - QR (void) : q (), r (), tau (0), work (0), tmp_data (0) { } + QR (void) : q (), r () { } QR (const Matrix& A, type qr_type = QR::std); @@ -60,12 +60,7 @@ return *this; } - ~QR (void) - { - delete [] tau; - delete [] work; - delete [] tmp_data; - } + ~QR (void) { } Matrix Q (void) const { return q; } @@ -77,10 +72,6 @@ Matrix q; Matrix r; - - double *tau; - double *work; - double *tmp_data; }; #endif