diff liboctave/SparseQR.cc @ 6924:be176b7e110a

[project @ 2007-09-25 19:08:19 by dbateman]
author dbateman
date Tue, 25 Sep 2007 19:08:20 +0000
parents 11fcab4c461d
children 93c65f2a5668
line wrap: on
line diff
--- a/liboctave/SparseQR.cc	Tue Sep 25 16:57:13 2007 +0000
+++ b/liboctave/SparseQR.cc	Tue Sep 25 19:08:20 2007 +0000
@@ -173,10 +173,12 @@
   octave_idx_type nc = N->L->n;
   octave_idx_type nr = nrows;
   const double *bvec = b.fortran_vec();
-  Matrix ret(b_nr,b_nc);
+  Matrix ret (b_nr, b_nc);
   double *vec = ret.fortran_vec();
-  if (nr < 1 || nc < 1 || nr != b_nr)
+  if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler) ("matrix dimension mismatch");
+  else if (nr == 0 || nc == 0 || b_nc == 0)
+    ret = Matrix (nc, b_nc, 0.0);
   else
     {
       OCTAVE_LOCAL_BUFFER (double, buf, S->m2);
@@ -223,9 +225,11 @@
   const double *bvec = b.fortran_vec();
   Matrix x;
 
-  if (nr < 1 || nc < 1 || nr != b_nr)
+  if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler)
       ("matrix dimension mismatch in solution of minimum norm problem");
+  else if (nr == 0 || nc == 0 || b_nc == 0)
+    x = Matrix (nc, b_nc, 0.0);
   else if (nr >= nc)
     {
       SparseQR q (a, 3);
@@ -325,9 +329,11 @@
   SparseMatrix x;
   volatile octave_idx_type ii, x_nz;
 
-  if (nr < 1 || nc < 1 || nr != b_nr)
+  if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler)
       ("matrix dimension mismatch in solution of minimum norm problem");
+  else if (nr == 0 || nc == 0 || b_nc == 0)
+    x = SparseMatrix (nc, b_nc);
   else if (nr >= nc)
     {
       SparseQR q (a, 3);
@@ -473,9 +479,11 @@
   octave_idx_type b_nr = b.rows();
   ComplexMatrix x;
 
-  if (nr < 1 || nc < 1 || nr != b_nr)
+  if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler)
       ("matrix dimension mismatch in solution of minimum norm problem");
+  else if (nr == 0 || nc == 0 || b_nc == 0)
+    x = ComplexMatrix (nc, b_nc, Complex (0.0, 0.0));
   else if (nr >= nc)
     {
       SparseQR q (a, 3);
@@ -639,9 +647,11 @@
   SparseComplexMatrix x;
   volatile octave_idx_type ii, x_nz;
 
-  if (nr < 1 || nc < 1 || nr != b_nr)
+  if (nr < 0 || nc < 0 || nr != b_nr)
     (*current_liboctave_error_handler)
       ("matrix dimension mismatch in solution of minimum norm problem");
+  else if (nr == 0 || nc == 0 || b_nc == 0)
+    x = SparseComplexMatrix (nc, b_nc);
   else if (nr >= nc)
     {
       SparseQR q (a, 3);