Mercurial > hg > octave-thorsten
diff liboctave/dbleQRP.cc @ 8367:445d27d79f4e
support permutation matrix objects
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 04 Dec 2008 08:31:56 +0100 (2008-12-04) |
parents | 29980c6b8604 |
children | c72c1c9bccdc |
line wrap: on
line diff
--- a/liboctave/dbleQRP.cc +++ b/liboctave/dbleQRP.cc @@ -81,7 +81,7 @@ double *tmp_data = A_fact.fortran_vec (); - Array<octave_idx_type> jpvt (n, 0); + MArray<octave_idx_type> jpvt (n, 0); octave_idx_type *pjpvt = jpvt.fortran_vec (); // Code to enforce a certain permutation could go here... @@ -91,18 +91,8 @@ // Form Permutation matrix (if economy is requested, return the // indices only!) - if (qr_type == QR::economy) - { - p.resize (1, n, 0.0); - for (octave_idx_type j = 0; j < n; j++) - p.elem (0, j) = jpvt.elem (j); - } - else - { - p.resize (n, n, 0.0); - for (octave_idx_type j = 0; j < n; j++) - p.elem (jpvt.elem (j) - 1, j) = 1.0; - } + jpvt -= 1; + p = PermMatrix (jpvt, true); octave_idx_type n2 = (qr_type == QR::economy) ? min_mn : m; @@ -125,6 +115,14 @@ q.resize (m, n2); } +ColumnVector +QRP::Pvec (void) const +{ + Array<double> pa (p); + ColumnVector pv (MArray<double> (pa) + 1.0); + return pv; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***