diff src/DLD-FUNCTIONS/chol.cc @ 7559:07522d7dcdf8

fixes to QR and Cholesky updating code
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 05 Mar 2008 14:23:26 -0500
parents 40574114c514
children eb7bdde776f2
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/chol.cc	Wed Mar 05 04:44:49 2008 -0500
+++ b/src/DLD-FUNCTIONS/chol.cc	Wed Mar 05 14:23:26 2008 -0500
@@ -471,31 +471,35 @@
 @seealso{chol, qrupdate}\n\
 @end deftypefn")
 {
-  int nargin = args.length ();
+  octave_idx_type nargin = args.length ();
 
   octave_value_list retval;
 
-  octave_value argR,argu,argop;
+  if (nargin > 3 || nargin < 2)
+    {
+      print_usage ();
+      return retval;
+    }
 
-  if ((nargin == 3 || nargin == 2)
-      && (argR = args(0), argR.is_matrix_type ())
-      && (argu = args(1), argu.is_matrix_type ())
-      && (nargin < 3 || (argop = args(2), argop.is_string ())))
-    {
-      octave_idx_type n = argR.rows ();
+  octave_value argr = args(0);
+  octave_value argu = args(1);
 
-      std::string op = (nargin < 3) ? "+" : argop.string_value();
+  if (argr.is_matrix_type () && argu.is_matrix_type ()
+      && (nargin < 3 || args(2).is_string ()))
+    {
+      octave_idx_type n = argr.rows ();
 
-      bool down = false;
+      std::string op = (nargin < 3) ? "+" : args(2).string_value ();
 
-      if (nargin < 3 || (op == "+") || (down = op == "-"))
-        if (argR.columns () == n 
-            && argu.rows () == n && argu.columns () == 1)
+      bool down = op == "-";
+
+      if (down || op == "+")
+        if (argr.columns () == n && argu.rows () == n && argu.columns () == 1)
           {
-            if (argR.is_real_matrix () && argu.is_real_matrix ())
+            if (argr.is_real_matrix () && argu.is_real_matrix ())
               {
                 // real case
-                Matrix R = argR.matrix_value ();
+                Matrix R = argr.matrix_value ();
                 Matrix u = argu.matrix_value ();
 
                 CHOL fact;
@@ -517,7 +521,7 @@
             else
               {
                 // complex case
-                ComplexMatrix R = argR.complex_matrix_value ();
+                ComplexMatrix R = argr.complex_matrix_value ();
                 ComplexMatrix u = argu.complex_matrix_value ();
 
                 ComplexCHOL fact;