]> git.tdb.fi Git - libs/math.git/commitdiff
Rename the low-level matrix inversion function to gauss_jordan
authorMikko Rasa <tdb@tdb.fi>
Thu, 9 Nov 2017 10:07:20 +0000 (12:07 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sat, 11 Nov 2017 12:04:11 +0000 (14:04 +0200)
Since that's the name of the algorithm being used.  Also remove an
unnecessary assignment from the non-mutating case.

source/linal/matrixops.h
source/linal/squarematrix.h

index 5bf9f433150fb111d77296508746a488625ef1e8..84c8012dd49addb539ee5d5f5ebcc4dfaf745fe1 100644 (file)
@@ -17,7 +17,7 @@ public:
 
 
 template<typename T>
-inline T &invert_matrix(T &m, T &r)
+inline T &gauss_jordan(T &m, T &r)
 {
        typedef typename T::ElementType V;
        using std::abs;
@@ -54,7 +54,7 @@ inline T &invert_matrix(T &m, T &r)
                for(unsigned j=i; j-->0; )
                        r.add_row(i, j, -m.element(j, i));
 
-       return m = r;
+       return r;
 }
 
 } // namespace LinAl
index 0a97e61172b6489c58e91296421e946cfddfb9d8..b8531aafcb8359bcda6ea35628a9f561f77b677b 100644 (file)
@@ -47,14 +47,16 @@ template<typename T, unsigned S>
 SquareMatrix<T, S> &SquareMatrix<T, S>::invert()
 {
        SquareMatrix<T, S> r = identity();
-       return invert_matrix(*this, r);
+       gauss_jordan(*this, r);
+       return *this = r;
 }
 
 template<typename T, unsigned S>
 inline SquareMatrix<T, S> invert(const SquareMatrix<T, S> &m)
 {
-       SquareMatrix<T, S> r = m;
-       return r.invert();
+       SquareMatrix<T, S> temp = m;
+       SquareMatrix<T, S> r = SquareMatrix<T, S>::identity();
+       return gauss_jordan(temp, r);
 }
 
 } // namespace LinAl