diff liboctave/numeric/lu.h @ 21271:7e67c7f82fc1

better use of templates for lu factorization classes * liboctave/numeric/lu.h, liboctave/numeric/lu.cc: New files generated from base-lu.h, base-lu.cc, CmplxLU.cc, CmplxLU.h, dbleLU.cc, dbleLU.h, fCmplxLU.cc, fCmplxLU.h, floatLU.cc, and floatLU.h and converted to templates. * liboctave/numeric/module.mk: Update. * lu.cc, mx-defs.h, mx-ext.h, eigs-base.cc: Use new classes.
author John W. Eaton <jwe@octave.org>
date Tue, 16 Feb 2016 12:58:32 -0500
parents liboctave/numeric/base-lu.h@1473547f50f5
children 6ca3acf5fad8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/liboctave/numeric/lu.h	Tue Feb 16 12:58:32 2016 -0500
@@ -0,0 +1,98 @@
+/*
+
+Copyright (C) 1996-2015 John W. Eaton
+Copyright (C) 2009 VZLU Prague
+
+This file is part of Octave.
+
+Octave is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+Octave is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Octave; see the file COPYING.  If not, see
+<http://www.gnu.org/licenses/>.
+
+*/
+
+#if ! defined (octave_lu_h)
+#define octave_lu_h 1
+
+#include "octave-config.h"
+
+#include "PermMatrix.h"
+
+template <typename T>
+class
+lu
+{
+public:
+
+  typedef typename T::column_vector_type VT;
+  typedef typename T::element_type ELT_T;
+
+  lu (void)
+    : a_fact (), l_fact (), ipvt () { }
+
+  lu (const T& a);
+
+  lu (const lu& a)
+    : a_fact (a.a_fact), l_fact (a.l_fact), ipvt (a.ipvt) { }
+
+  lu (const T& l, const T& u, const PermMatrix& p);
+
+  lu& operator = (const lu& a)
+  {
+    if (this != &a)
+      {
+        a_fact = a.a_fact;
+        l_fact = a.l_fact;
+        ipvt = a.ipvt;
+      }
+
+    return *this;
+  }
+
+  virtual ~lu (void) { }
+
+  bool packed (void) const;
+
+  void unpack (void);
+
+  T L (void) const;
+
+  T U (void) const;
+
+  T Y (void) const;
+
+  PermMatrix P (void) const;
+
+  ColumnVector P_vec (void) const;
+
+  bool regular (void) const;
+
+  void update (const VT& u, const VT& v);
+
+  void update (const T& u, const T& v);
+
+  void update_piv (const VT& u, const VT& v);
+
+  void update_piv (const T& u, const T& v);
+
+protected:
+
+  Array<octave_idx_type> getp (void) const;
+
+  T a_fact;
+  T l_fact;
+
+  Array<octave_idx_type> ipvt;
+};
+
+#endif