]> www.ginac.de Git - ginac.git/blobdiff - ginac/matrix.h
- Completely restructured the checks in subdir check/.
[ginac.git] / ginac / matrix.h
index 1b454a78ef70cb200f56f501ecfd8bc345b87763..3a6f0e539f19757410d6eff2b7e4a4701102e3d7 100644 (file)
 #define __GINAC_MATRIX_H__
 
 #include <vector>
-#include <ginac/basic.h>
-#include <ginac/ex.h>
+#include "basic.h"
+#include "ex.h"
 
-#ifndef NO_GINAC_NAMESPACE
+#ifndef NO_NAMESPACE_GINAC
 namespace GiNaC {
-#endif // ndef NO_GINAC_NAMESPACE
+#endif // ndef NO_NAMESPACE_GINAC
 
 /** Symbolic matrices. */
 class matrix : public basic
@@ -37,10 +37,7 @@ class matrix : public basic
     GINAC_DECLARE_REGISTERED_CLASS(matrix, basic)
 
 // friends
-    friend ex determinant_numeric(const matrix & m);
-    friend ex determinant_symbolic_perm(const matrix & m);
-    friend ex determinant_symbolic_minor(const matrix & m);
-
+// (none)
 // member functions
 
     // default constructor, destructor, copy constructor, assignment operator
@@ -65,6 +62,7 @@ public:
     void print(ostream & os, unsigned upper_precedence=0) const;
     void printraw(ostream & os) const;
     unsigned nops() const;
+    ex op(int i) const;
     ex & let_op(int i);
     ex expand(unsigned options=0) const;
     bool has(const ex & other) const;
@@ -94,9 +92,16 @@ public:
     ex charpoly(const ex & lambda) const;
     matrix inverse(void) const;
     matrix fraction_free_elim(const matrix & vars, const matrix & v) const;
-    matrix solve(const matrix & v) const;
+    matrix solve(const matrix & vars, const matrix & rhs) const;
+    matrix old_solve(const matrix & v) const;  // FIXME: may be removed
 protected:
-    int pivot(unsigned ro);
+    ex determinant_numeric(void) const;
+    ex determinant_symbolic_minor(void) const;
+    ex determinant_symbolic_perm(void) const;
+    int gauss_elimination(void);
+    int fraction_free_elimination(void);
+    int pivot(unsigned ro, bool symbolic=true);
+private:  // FIXME: these should be obsoleted
     void ffe_swap(unsigned r1, unsigned c1, unsigned r2 ,unsigned c2);
     void ffe_set(unsigned r, unsigned c, ex e);
     ex ffe_get(unsigned r, unsigned c) const;
@@ -157,8 +162,8 @@ inline const matrix &ex_to_matrix(const ex &e)
        return static_cast<const matrix &>(*e.bp);
 }
 
-#ifndef NO_GINAC_NAMESPACE
+#ifndef NO_NAMESPACE_GINAC
 } // namespace GiNaC
-#endif // ndef NO_GINAC_NAMESPACE
+#endif // ndef NO_NAMESPACE_GINAC
 
 #endif // ndef __GINAC_MATRIX_H__