diff src/DLD-FUNCTIONS/chol.cc @ 9715:9f27172fbd1e

auto-set MatrixType from certain functions
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 12 Oct 2009 14:23:20 +0200
parents 5fcf008c7c41
children 09da0bd91412
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/chol.cc	Mon Oct 12 11:50:12 2009 +0200
+++ b/src/DLD-FUNCTIONS/chol.cc	Mon Oct 12 14:23:20 2009 +0200
@@ -45,6 +45,14 @@
 #include "oct-obj.h"
 #include "utils.h"
 
+template <class CHOLT>
+static octave_value
+get_chol_r (const CHOLT& fact)
+{
+  return octave_value (fact.chol_matrix (), 
+                       MatrixType (MatrixType::Upper));
+}
+
 DEFUN_DLD (chol, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn {Loadable Function} {@var{r} =} chol (@var{a})\n\
@@ -247,7 +255,7 @@
 		      if (LLt)
 			retval(0) = fact.chol_matrix ().transpose ();
 		      else
-			retval(0) = fact.chol_matrix ();
+			retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    error ("chol: matrix not positive definite");
@@ -267,7 +275,7 @@
 		      if (LLt)
 			retval(0) = fact.chol_matrix ().hermitian ();
 		      else
-			retval(0) = fact.chol_matrix ();
+			retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    error ("chol: matrix not positive definite");
@@ -292,7 +300,7 @@
 		      if (LLt)
 			retval(0) = fact.chol_matrix ().transpose ();
 		      else
-			retval(0) = fact.chol_matrix ();
+			retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    error ("chol: matrix not positive definite");
@@ -312,7 +320,7 @@
 		      if (LLt)
 			retval(0) = fact.chol_matrix ().hermitian ();
 		      else
-			retval(0) = fact.chol_matrix ();
+			retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    error ("chol: matrix not positive definite");
@@ -648,7 +656,7 @@
 		    else
 		      fact.update (u);
 
-		    retval(0) = fact.chol_matrix ();
+		    retval(0) = get_chol_r (fact);
 		  }
 		else
 		  {
@@ -664,7 +672,7 @@
 		    else
 		      fact.update (u);
 
-		    retval(0) = fact.chol_matrix ();
+		    retval(0) = get_chol_r (fact);
 		  }
 	      }
 	    else
@@ -683,7 +691,7 @@
 		    else
 		      fact.update (u);
 
-		    retval(0) = fact.chol_matrix ();
+		    retval(0) = get_chol_r (fact);
 		  }
 		else
 		  {
@@ -699,7 +707,7 @@
 		    else
 		      fact.update (u);
 
-		    retval(0) = fact.chol_matrix ();
+		    retval(0) = get_chol_r (fact);
 		  }
 	      }
 
@@ -853,7 +861,7 @@
 		      fact.set (R);
 		      err = fact.insert_sym (u, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -865,7 +873,7 @@
 		      fact.set (R);
 		      err = fact.insert_sym (u, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
 	      else
@@ -880,7 +888,7 @@
 		      fact.set (R);
 		      err = fact.insert_sym (u, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -892,7 +900,7 @@
 		      fact.set (R);
 		      err = fact.insert_sym (u, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
 
@@ -1023,7 +1031,7 @@
 		      fact.set (R);
 		      fact.delete_sym (j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -1034,7 +1042,7 @@
 		      fact.set (R);
 		      fact.delete_sym (j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
 	      else
@@ -1048,7 +1056,7 @@
 		      fact.set (R);
 		      fact.delete_sym (j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -1059,7 +1067,7 @@
 		      fact.set (R);
 		      fact.delete_sym (j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
             }
@@ -1164,7 +1172,7 @@
 		      fact.set (R);
 		      fact.shift_sym (i-1, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -1175,7 +1183,7 @@
 		      fact.set (R);
 		      fact.shift_sym (i-1, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
 	      else
@@ -1189,7 +1197,7 @@
 		      fact.set (R);
 		      fact.shift_sym (i-1, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		  else
 		    {
@@ -1200,7 +1208,7 @@
 		      fact.set (R);
 		      fact.shift_sym (i-1, j-1);
 
-		      retval(0) = fact.chol_matrix ();
+		      retval(0) = get_chol_r (fact);
 		    }
 		}
             }