# HG changeset patch # User Jaroslav Hajek # Date 1204727518 -3600 # Node ID 6317eed51592f505779816edbb0449b1b40609f5 # Parent d917a7de88c7513db6d347320174d925caa0317f modify QR updating methods to use 0-based indexing diff -r d917a7de88c7 -r 6317eed51592 liboctave/ChangeLog --- a/liboctave/ChangeLog Wed Mar 05 15:18:21 2008 +0100 +++ b/liboctave/ChangeLog Wed Mar 05 15:31:58 2008 +0100 @@ -5,6 +5,11 @@ 2008-03-05 Jaroslav Hajek diff -r d917a7de88c7 -r 6317eed51592 liboctave/CmplxQR.cc --- a/liboctave/CmplxQR.cc Wed Mar 05 15:18:21 2008 +0100 +++ b/liboctave/CmplxQR.cc Wed Mar 05 15:31:58 2008 +0100 @@ -190,14 +190,14 @@ ComplexQR::insert_col (const ComplexMatr if (u.length () != m) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > n+1) + else if (j < 0 || j > n) (*current_liboctave_error_handler) ("QR insert index out of range"); else { ComplexMatrix r1 (m,n+1); F77_XFCN (zqrinc, ZQRINC, (m, n, k, q.fortran_vec (), r.data (), - r1.fortran_vec (), j, u.data ())); + r1.fortran_vec (), j+1, u.data ())); r = r1; } @@ -212,14 +212,14 @@ ComplexQR::delete_col (octave_idx_type j if (k < m && k < n) (*current_liboctave_error_handler) ("QR delete dimensions mismatch"); - else if (j < 1 || j > n) + else if (j < 0 || j > n-1) (*current_liboctave_error_handler) ("QR delete index out of range"); else { ComplexMatrix r1 (k, n-1); F77_XFCN (zqrdec, ZQRDEC, (m, n, k, q.fortran_vec (), r.data (), - r1.fortran_vec (), j)); + r1.fortran_vec (), j+1)); r = r1; } @@ -233,7 +233,7 @@ ComplexQR::insert_row (const ComplexMatr if (! q.is_square () || u.length () != n) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > m+1) + else if (j < 0 || j > m) (*current_liboctave_error_handler) ("QR insert index out of range"); else { @@ -241,7 +241,7 @@ ComplexQR::insert_row (const ComplexMatr ComplexMatrix r1 (m+1, n); F77_XFCN (zqrinr, ZQRINR, (m, n, q.data (), q1.fortran_vec (), - r.data (), r1.fortran_vec (), j, u.data ())); + r.data (), r1.fortran_vec (), j+1, u.data ())); q = q1; r = r1; @@ -256,7 +256,7 @@ ComplexQR::delete_row (octave_idx_type j if (! q.is_square ()) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > m) + else if (j < 0 || j > m-1) (*current_liboctave_error_handler) ("QR delete index out of range"); else { @@ -264,7 +264,7 @@ ComplexQR::delete_row (octave_idx_type j ComplexMatrix r1 (m-1, n); F77_XFCN (zqrder, ZQRDER, (m, n, q.data (), q1.fortran_vec (), - r.data (), r1.fortran_vec (), j )); + r.data (), r1.fortran_vec (), j+1 )); q = q1; r = r1; diff -r d917a7de88c7 -r 6317eed51592 liboctave/dbleQR.cc --- a/liboctave/dbleQR.cc Wed Mar 05 15:18:21 2008 +0100 +++ b/liboctave/dbleQR.cc Wed Mar 05 15:31:58 2008 +0100 @@ -179,14 +179,14 @@ QR::insert_col (const Matrix& u, octave_ if (u.length () != m) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > n+1) + else if (j < 0 || j > n) (*current_liboctave_error_handler) ("QR insert index out of range"); else { Matrix r1 (m, n+1); F77_XFCN (dqrinc, DQRINC, (m, n, k, q.fortran_vec (), r.data (), - r1.fortran_vec (), j, u.data ())); + r1.fortran_vec (), j+1, u.data ())); r = r1; } @@ -201,14 +201,14 @@ QR::delete_col (octave_idx_type j) if (k < m && k < n) (*current_liboctave_error_handler) ("QR delete dimensions mismatch"); - else if (j < 1 || j > n) + else if (j < 0 || j > n-1) (*current_liboctave_error_handler) ("QR delete index out of range"); else { Matrix r1 (k, n-1); F77_XFCN (dqrdec, DQRDEC, (m, n, k, q.fortran_vec (), r.data (), - r1.fortran_vec (), j)); + r1.fortran_vec (), j+1)); r = r1; } @@ -222,7 +222,7 @@ QR::insert_row (const Matrix& u, octave_ if (! q.is_square () || u.length () != n) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > m+1) + else if (j < 0 || j > m) (*current_liboctave_error_handler) ("QR insert index out of range"); else { @@ -230,7 +230,7 @@ QR::insert_row (const Matrix& u, octave_ Matrix r1 (m+1, n); F77_XFCN (dqrinr, DQRINR, (m, n, q.data (), q1.fortran_vec (), - r.data (), r1.fortran_vec (), j, u.data ())); + r.data (), r1.fortran_vec (), j+1, u.data ())); q = q1; r = r1; @@ -245,7 +245,7 @@ QR::delete_row (octave_idx_type j) if (! q.is_square ()) (*current_liboctave_error_handler) ("QR insert dimensions mismatch"); - else if (j < 1 || j > m) + else if (j < 0 || j > m-1) (*current_liboctave_error_handler) ("QR delete index out of range"); else { @@ -253,7 +253,7 @@ QR::delete_row (octave_idx_type j) Matrix r1 (m-1, n); F77_XFCN (dqrder, DQRDER, (m, n, q.data (), q1.fortran_vec (), - r.data (), r1.fortran_vec (), j )); + r.data (), r1.fortran_vec (), j+1 )); q = q1; r = r1; diff -r d917a7de88c7 -r 6317eed51592 src/ChangeLog --- a/src/ChangeLog Wed Mar 05 15:18:21 2008 +0100 +++ b/src/ChangeLog Wed Mar 05 15:31:58 2008 +0100 @@ -6,6 +6,9 @@ 2008-03-05 Jaroslav Hajek diff -r d917a7de88c7 -r 6317eed51592 src/DLD-FUNCTIONS/qr.cc --- a/src/DLD-FUNCTIONS/qr.cc Wed Mar 05 15:18:21 2008 +0100 +++ b/src/DLD-FUNCTIONS/qr.cc Wed Mar 05 15:31:58 2008 +0100 @@ -628,9 +628,9 @@ If @var{orient} is @code{\"row\"}, @var{ QR fact (Q, R); if (row) - fact.insert_row (x, j); + fact.insert_row (x, j-1); else - fact.insert_col (x, j); + fact.insert_col (x, j-1); retval(1) = fact.R (); retval(0) = fact.Q (); @@ -645,9 +645,9 @@ If @var{orient} is @code{\"row\"}, @var{ ComplexQR fact (Q, R); if (row) - fact.insert_row (x, j); + fact.insert_row (x, j-1); else - fact.insert_col (x, j); + fact.insert_col (x, j-1); retval(1) = fact.R (); retval(0) = fact.Q (); @@ -809,10 +809,10 @@ If @var{orient} is \"row\", @var{Q} must QR fact (Q, R); if (row) - fact.delete_row (j); + fact.delete_row (j-1); else { - fact.delete_col (j); + fact.delete_col (j-1); if (! colp && k < m) fact.economize (); @@ -830,10 +830,10 @@ If @var{orient} is \"row\", @var{Q} must ComplexQR fact (Q, R); if (row) - fact.delete_row (j); + fact.delete_row (j-1); else { - fact.delete_col (j); + fact.delete_col (j-1); if (! colp && k < m) fact.economize ();