Niet af
Fork of Matrix by
Matrix.h
- Committer:
- Yo_Robot
- Date:
- 2011-09-26
- Revision:
- 1:48f417da268e
- Parent:
- 0:3abd8c2d7c34
- Child:
- 2:493402568a5e
File content as of revision 1:48f417da268e:
/** * @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 * */ #ifndef MATRIX_H #define MATRIX_H #include <vector> using namespace std; /** * @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 and copies data. * 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 [ Rows 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 * This is the '=' Overloaded operator. It RESIZES assigned the matrix. * Overwrites all data. To be used Carefully! */ Matrix& operator = ( const Matrix &rightM ); /** @brief * Overload opeartor for the compare Matrices * * @param rightM * @return Boolean 'false' if different. */ bool operator == ( const Matrix &rightM ); /** @brief * Overload opeartor for the compare Matrices * * @param rightM * @return Boolean 'true' if different */ bool operator != ( const Matrix &rightM ); /** @brief * Overload Copmpound assignment. * @param rightM * @return A new Matrix to be assigned to itself. */ Matrix& operator += ( const Matrix &rightM ); /** @brief * Overload Compund decrease. * @param rightM Right hand matrix * @return A new Matrix to be assigned to itself */ Matrix& operator -= ( const Matrix &rightM ); /** @brief * 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 * Overloads the Minus, returns a new object * @param rightM * @return Returns an instance of the asnwer */ const Matrix operator -( const Matrix &rightM ); /** @brief * Returns TRUE if the matrix is zero, FALSE otherwhise * @param mat: Matrix to be tested */ bool isZero(); /** @brief * Determines weather a Matrix is a Single Column or Row. */ bool isVector(); /** @brief * Shatters the matrix into a single Row Vector. * Important: Returns NEW matrix, does no modify existing one. */ Matrix ToPackedVector(); /** @brief * Determines if two matrices are equal. * @param mat1: First Matrix * @param mat2: Sencond Matrix */ static bool Equals( const Matrix mat1, const Matrix mat2 ); /**@brief * 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 * 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 * 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 * Invoking this static method will increase a Row in Mat in the desired * position. * The current Row will be moved down to allocate space, and all elements will * be initialized to zero in the new row. * @param Mat: Matrix in wich to insert a Row * @param Row: Number of row to insert, starts with one, not zero. */ static void AddRow( Matrix &Mat, int Row ); /** @brief * Invoking this static method will increase a Column in Matrix in the * desired Position. * @param Mat: Matrix in wich to insert a Column * @param Col: Number of column, strats with one, not zero. */ static void AddColumn( Matrix &Mat, int Col ); /** @brief * 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 * Static Function Deletes Column from Matrix, it's Static to prevent * missuse. * Print error and does nothing if out of limits. * @param Col: Number of Col to delete (first Col = 1) * @param Mat: Matrix to delete from. */ static void DeleteCol( Matrix &Mat, int Col ); /** @brief * This method extracts a Row from a Matrix and Saves it in Mat. * If Row is out of the parameters it does nothing, but prints a warning. * @param Row: number of row to extract elements. this->_nRows. * @param Mat: Matrix to resize if neccesaty and save data. */ void ExportRow( int Row, Matrix &Mat); /** @brief * This method extracts a Column from a Matrix and saves it to Mat. * If Row is out of the parameters, it does nothing and prints a warning. * @param Col: number of Column to extract elements. this->_nCols. * @param Mat: Matrix to save data to. */ void ExportCol( int Col, Matrix &Mat ); /** @brief * 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 * Asks user for numbers to fill the Matrix elements, one by one. * It uses printf(); by default the USBTX, USBRX, 9600, 1N8. */ void FillMatrix(); /** @brief * Prints the entire Matrix */ void print(); /** @brief * Makes all values on Matrix object zero. */ void Clear(); /** @brief * Assigns a float number to the matrix in a specified position * Index starts at [1][1]. * * @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 * Returns the sum of every cell in the Matrix. */ float sum(); /** @brief * 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 ); /**@brief * Retuns the number of Columns in Matrix */ int getCols(); /**@brief *Retruns the number of Rows in Matrix */ int getRows(); private: /** 2-D Vector Array*/ vector < vector<float> > _matrix; /** Number of Rows in Matrix*/ int _nRows; /**Number of Columns in Matrix*/ int _nCols; }; #endif /* MATRIX_H */