Matrix Library. v1.6.4

Dependents:   Matrix_class Wizardsneverdie TwoTank mbed_multiplex_matrix ... more

Revision:
0:3abd8c2d7c34
Child:
1:48f417da268e
diff -r 000000000000 -r 3abd8c2d7c34 Matrix.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Matrix.h	Fri Sep 23 21:12:17 2011 +0000
@@ -0,0 +1,323 @@
+
+/** 
+ * @file:   Matrix.h
+ * @author: Ernesto Palacios
+ * Created on 13 de septiembre de 2011, 03:49 PM
+ * 
+ * Develop Under  GPL v3.0 License
+ * http://www.gnu.org/licenses/gpl-3.0.html
+ *
+ */
+
+#include <vector>
+
+#ifndef MATRIX_H
+#define MATRIX_H
+
+/**
+ * @brief This class is intended to provide basic functionality to a Matrix like vector
+ * it's meant for float elements.
+ * 
+ * IMPORTAT: Asignment "=" operator is overloaded so that it resizes the 'lefthand' Matrix 
+ * to acomodate the Matrix it's been passed.
+ *
+ * An example of how it works:
+ * @code
+ * Matrix myMatrix( 3, 4 );  //Declare a 3 Rows by 4 Columns Matrix.
+ * 
+ * myMatrix.Fill();        // Fill the matrix using printf() and scanf().
+ * myMatrix.print();       // Prints the value of the Matrix. printf()
+ * 
+ * Matrix::DeleteCol( myMatrix, 2 ); //Deletes Second Column. (startin' with 1 not 0)
+ * myMatrix.print();      // Re-prints Matrix
+ *
+ * Matrix anotherMatrix (3);  // Squared 3x3 Matrix
+ * anotherMatrix = myMatrix;  // Re-Sizes 'anotherMatrix' to fit myMatrix
+ * anotherMatrix += myMatrix; // Adds one-by-one elements and saves to anotherMatrix
+ * anotherMatrix.print();
+ * @endcode
+ *
+ */
+class Matrix{
+public:
+
+    /// Creates a nex Matrix of Size [ Row x Cols ]
+    Matrix( int Rows, int Cols );
+
+    /// Creats a Square Matrix o Size [ Roxs x Rows ]
+    Matrix( int Rows );
+
+    
+    /// Creates a new Matrix identical in size to an input Matrix
+    Matrix( const Matrix &base );
+
+
+    /// Reserves Memory for a New Matrix
+    Matrix();
+
+
+
+    /** @brief Description:
+     * This is the '=' Overloaded operator. It RESIZES assigned the matrix.
+     * Overwrites all data. To be used Carefully!
+     */
+    Matrix& operator = ( const Matrix &rightM );
+
+
+    /**@brief Description:
+     * Overload opeartor for the compare Matrices
+     *
+     * @param rightM
+     * @return Boolean 'false' if different.
+     */
+    bool operator == ( const Matrix &rightM );
+
+
+
+    /**@brief Description:
+     * Overload opeartor for the compare Matrices
+     *
+     * @param rightM
+     * @return Boolean 'true' if different
+     */
+    bool operator != ( const Matrix &rightM );
+
+    /**@brief
+     * Description:
+     * Overload Copmpound assignment.
+     * @param rightM
+     * @return A new Matrix to be assigned to itself.
+     */
+    Matrix& operator += ( const Matrix &rightM );
+
+
+
+    /**@brief
+     * Description:
+     * Overload Compund decrease.
+     * @param rightM Right hand matrix
+     * @return A new Matrix to be assigned to itself
+     */
+    Matrix& operator -= ( const Matrix &rightM );
+
+
+
+    /**@brief
+     * Description:
+     * Overloads the Plus, returns a new object.
+     * @param rightM right side Matrix
+     * @return Retuns an instance of the answer.
+     */
+    const Matrix operator +( const Matrix &rightM );
+
+
+    /**@brief
+     * Description:
+     * Overloads the Minus, returns a new object
+     * @param rightM
+     * @return Returns an instance of the asnwer
+     */
+    const Matrix operator -( const Matrix &rightM );
+
+
+
+    /** @brief
+     * Description:
+     * This method extracts a Row from a Matrix.
+     * If Row is out of the parameters, it returns
+     * an empty Row and prints a warning
+     * @param Matrix: Matrix to extract from
+     * @param Row: row number of the matrix
+     */
+    Matrix GetRow(Matrix mat, int Row);
+
+
+
+    /** @brief
+     * Description:
+     * This method extracts a Column from a Matrix.
+     * If Row is out of the parameters, it returns
+     * an empty Column and prints a warning
+     */
+    Matrix GetCol(Matrix mat, int Col);
+
+
+
+    /** @brief
+     * Description:
+     * Shatters the matrix into a single Row Vector.
+     * Important: Returns NEW matrix, does no modify existing one.
+     */
+    Matrix ToPackedVector();
+
+
+
+    /** @brief
+     * Description:
+     * Returns TRUE if the matrix is zero, FALSE otherwhise
+     * @param mat: Matrix to be tested
+     */
+    bool isZero();
+
+
+
+    /** @brief
+     * Description:
+     * Determines weather a Matrix is a Single Column or Row.
+     */
+    bool isVector();
+
+
+
+    /**@brief
+     * Description:
+     * Determines if two matrices are equal.
+     * @param mat1: First Matrix
+     * @param mat2: Sencond Matrix
+     */
+    static const bool Equals( Matrix mat1, Matrix mat2 );
+
+
+
+    /**@brief
+     * Description:
+     * This Funcrions instanciates a new Row Matrix. Since this is a
+     * static function it needs to be assigned to an Empy Matrix Object
+     * @param Rows: Number of Rows
+     */
+    static Matrix CreateRowMatrix(int Rows);
+
+
+
+
+    /**@brief
+     * Description:
+     * This function instanciates a new Column Matrix. Since this is a
+     * static function it needs to be assigned to an Empty Matrix object
+     * @param Cols: Number of Columns in Matrix
+     */
+    static Matrix CreateColumnMatrix(int Cols);
+
+
+
+    /**@brief
+     * Description:
+     * This STATIC function Clones two Matrices.
+     * The Source Matrix can be any Size.
+     * The Receip Matrix MUST be just initialized
+     * as in: Matrix NewMatrix();
+     * @param Source: Base Matrix to Clone.
+     * @param Receip: Destination shell matrix
+     */
+    static void Clone( const Matrix &Source, Matrix Receip );
+
+
+
+    /**@brief
+     * Description:
+     * Static Function Deletes Row from Matrix, Static to prevent missuse
+     * @param Mat: Matrix to delete Row from
+     * @param Row: Number of Row (first Row = 1)
+     */
+    static void DeleteRow( Matrix &Mat, int Row );
+
+
+    /**@brief
+     * Description:
+     * Static Function Deletes Column from Matrix, it's Static to prevent
+     * missuse.
+     * Print error and does nothing if out of limits.
+     * @Mat: Matrix to delete column from
+     * @param Col: Number of Col to delete (first Col = 1)
+     */
+    static void DeleteCol( Matrix &Mat, int Col );
+
+
+
+    /**@brief
+     * Description:
+     * Assigns a float number to the matrix in position
+     *
+     * @param number:   Number to be set
+     * @param Row:      Row of Matrix
+     * @param Col:      Column of Matrix
+     */
+    void Add( int Row, int Col, float number );
+
+
+
+    /**@brief
+     * Description:
+     * This function resizes the Matrix to fit new data.
+     * @param Rows: New Number of Rows
+     * @param Cols: New numbler of columns
+     */
+    void Resize( int Rows, int Cols );
+
+
+
+    /** @brief
+     * Description:
+     * Asks user for numbers to fill the Matrix elements. One by one
+     */
+    void FillMatrix();
+
+
+
+    /** @brief
+     * Description:
+     * Makes all values on Matrix object zero.
+     */
+    void Clear();
+
+
+
+    /** @brief
+     * Description:
+     * Prints the entire Matrix
+     */
+    void print();
+
+
+
+    /** \brief
+     * Description:
+     * Returns the sum of every cell in the Matrix.
+     */
+    float Sum();
+
+
+    /** @brief
+     * Description:
+     * Return the number in position [Row],[Col]
+     * @param Row = number of row in matrix
+     * @param Col = number of Col in matrix
+     * @return Num = float number in matrix
+     */
+    float GetNumber( int Row, int Col );
+
+
+    
+    /**Retuns the number of Columns in Matrix*/
+    int  getCols();
+
+
+
+    /**Retruns the number of Rows in Matrix */
+    int  getRows();
+
+
+private:
+
+    /** 2-D Vector Array*/
+    vector < vector<float> > _matrix;
+
+    /** Number of Rows in Matrix*/
+    int _Rows;
+
+    /**Number of Columns in Matrix*/
+    int _Cols;
+
+};
+
+#endif    /* MATRIX_H */