Matrix Library. v1.6.4 + some changes
Diff: Matrix.h
- Revision:
- 0:3abd8c2d7c34
- Child:
- 1:48f417da268e
--- /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 */