diff src/DLD-FUNCTIONS/chol.cc @ 9862:c0aeedd8fb86

improve chol Matlab compatibility
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 25 Nov 2009 07:31:59 +0100
parents 09da0bd91412
children 40dfc0c99116
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/chol.cc	Tue Nov 24 11:57:01 2009 -0800
+++ b/src/DLD-FUNCTIONS/chol.cc	Wed Nov 25 07:31:59 2009 +0100
@@ -53,6 +53,14 @@
                        MatrixType (MatrixType::Upper));
 }
 
+template <class CHOLT>
+static octave_value
+get_chol_l (const CHOLT& fact)
+{
+  return octave_value (fact.chol_matrix ().transpose (), 
+                       MatrixType (MatrixType::Lower));
+}
+
 DEFUN_DLD (chol, args, nargout,
   "-*- texinfo -*-\n\
 @deftypefn {Loadable Function} {@var{r} =} chol (@var{a})\n\
@@ -243,9 +251,9 @@
 		  FloatCHOL fact (m, info);
 		  if (nargout == 2 || info == 0)
 		    {
-		      retval(1) = static_cast<float> (info);
+		      retval(1) = info;
 		      if (LLt)
-			retval(0) = fact.chol_matrix ().transpose ();
+			retval(0) = get_chol_l (fact);
 		      else
 			retval(0) = get_chol_r (fact);
 		    }
@@ -263,9 +271,9 @@
 		  FloatComplexCHOL fact (m, info);
 		  if (nargout == 2 || info == 0)
 		    {
-		      retval(1) = static_cast<float> (info);
+		      retval(1) = info;
 		      if (LLt)
-			retval(0) = fact.chol_matrix ().hermitian ();
+			retval(0) = get_chol_l (fact);
 		      else
 			retval(0) = get_chol_r (fact);
 		    }
@@ -288,9 +296,9 @@
 		  CHOL fact (m, info);
 		  if (nargout == 2 || info == 0)
 		    {
-		      retval(1) = static_cast<double> (info);
+		      retval(1) = info;
 		      if (LLt)
-			retval(0) = fact.chol_matrix ().transpose ();
+			retval(0) = get_chol_l (fact);
 		      else
 			retval(0) = get_chol_r (fact);
 		    }
@@ -308,9 +316,9 @@
 		  ComplexCHOL fact (m, info);
 		  if (nargout == 2 || info == 0)
 		    {
-		      retval(1) = static_cast<double> (info);
+		      retval(1) = info;
 		      if (LLt)
-			retval(0) = fact.chol_matrix ().hermitian ();
+			retval(0) = get_chol_l (fact);
 		      else
 			retval(0) = get_chol_r (fact);
 		    }