Kalman filter for Eurobot

Committer:
madcowswe
Date:
Tue Mar 20 12:43:16 2012 +0000
Revision:
0:a0285293f6a6
Algo done, vars not done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madcowswe 0:a0285293f6a6 1 /**
madcowswe 0:a0285293f6a6 2 * @brief Source Code for the Matrix Class.
madcowswe 0:a0285293f6a6 3 * @file Matrix.cpp
madcowswe 0:a0285293f6a6 4 * @author Ernesto Palacios
madcowswe 0:a0285293f6a6 5 *
madcowswe 0:a0285293f6a6 6 * Created on September 2011.
madcowswe 0:a0285293f6a6 7 *
madcowswe 0:a0285293f6a6 8 * Develop Under GPL v3.0 License
madcowswe 0:a0285293f6a6 9 * http://www.gnu.org/licenses/gpl-3.0.html
madcowswe 0:a0285293f6a6 10 *
madcowswe 0:a0285293f6a6 11 */
madcowswe 0:a0285293f6a6 12
madcowswe 0:a0285293f6a6 13 #include "mbed.h"
madcowswe 0:a0285293f6a6 14 #include "Matrix.h"
madcowswe 0:a0285293f6a6 15
madcowswe 0:a0285293f6a6 16 /// Rows by Cols Matrix Constructor
madcowswe 0:a0285293f6a6 17 Matrix::Matrix(int Rows, int Cols): _nRows(Rows), _nCols(Cols)
madcowswe 0:a0285293f6a6 18 {
madcowswe 0:a0285293f6a6 19 _matrix.resize(_nRows);
madcowswe 0:a0285293f6a6 20 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 21 _matrix[i].resize(_nCols);
madcowswe 0:a0285293f6a6 22
madcowswe 0:a0285293f6a6 23 _pRow = 0;
madcowswe 0:a0285293f6a6 24 _pCol = 0;
madcowswe 0:a0285293f6a6 25
madcowswe 0:a0285293f6a6 26 this->Clear(); //Make all elements zero by default.
madcowswe 0:a0285293f6a6 27 }
madcowswe 0:a0285293f6a6 28
madcowswe 0:a0285293f6a6 29
madcowswe 0:a0285293f6a6 30 /// Copies one matrix into a new one
madcowswe 0:a0285293f6a6 31 Matrix::Matrix(const Matrix& base)
madcowswe 0:a0285293f6a6 32 {
madcowswe 0:a0285293f6a6 33 _nCols = base._nCols;
madcowswe 0:a0285293f6a6 34 _nRows = base._nRows;
madcowswe 0:a0285293f6a6 35
madcowswe 0:a0285293f6a6 36 _pRow = base._pRow;
madcowswe 0:a0285293f6a6 37 _pCol = base._pCol;
madcowswe 0:a0285293f6a6 38
madcowswe 0:a0285293f6a6 39 _matrix.resize(_nRows);
madcowswe 0:a0285293f6a6 40 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 41 _matrix[i].resize(_nCols);
madcowswe 0:a0285293f6a6 42
madcowswe 0:a0285293f6a6 43 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 44 for( int j = 0; j < _nCols; j++ )
madcowswe 0:a0285293f6a6 45 _matrix[i][j] = base._matrix[i][j];
madcowswe 0:a0285293f6a6 46 }
madcowswe 0:a0285293f6a6 47
madcowswe 0:a0285293f6a6 48
madcowswe 0:a0285293f6a6 49 /// Default Constructor
madcowswe 0:a0285293f6a6 50 Matrix::Matrix()
madcowswe 0:a0285293f6a6 51 {
madcowswe 0:a0285293f6a6 52 _nCols = 0;
madcowswe 0:a0285293f6a6 53 _nRows = 0;
madcowswe 0:a0285293f6a6 54
madcowswe 0:a0285293f6a6 55 _pRow = 0;
madcowswe 0:a0285293f6a6 56 _pCol = 0;
madcowswe 0:a0285293f6a6 57
madcowswe 0:a0285293f6a6 58 }
madcowswe 0:a0285293f6a6 59
madcowswe 0:a0285293f6a6 60 /***********************************************************************/
madcowswe 0:a0285293f6a6 61
madcowswe 0:a0285293f6a6 62 /// Returns true if matrix is full of zeros
madcowswe 0:a0285293f6a6 63 bool Matrix::isZero() const
madcowswe 0:a0285293f6a6 64 {
madcowswe 0:a0285293f6a6 65 bool zero = false;
madcowswe 0:a0285293f6a6 66 for( int i = 0; i < this->_nRows; i++ )
madcowswe 0:a0285293f6a6 67 for( int j = 0; j < this->_nCols; j++ )
madcowswe 0:a0285293f6a6 68 if( _matrix[i][j] != 0 )
madcowswe 0:a0285293f6a6 69 zero = zero || true;
madcowswe 0:a0285293f6a6 70 return !zero;
madcowswe 0:a0285293f6a6 71 }
madcowswe 0:a0285293f6a6 72
madcowswe 0:a0285293f6a6 73
madcowswe 0:a0285293f6a6 74 /// Returns true if Matrix is Single Row ot Single Column.
madcowswe 0:a0285293f6a6 75 bool Matrix::isVector() const
madcowswe 0:a0285293f6a6 76 {
madcowswe 0:a0285293f6a6 77 if( _nRows == 1 || _nCols == 1 )
madcowswe 0:a0285293f6a6 78 return true;
madcowswe 0:a0285293f6a6 79 else
madcowswe 0:a0285293f6a6 80 return false;
madcowswe 0:a0285293f6a6 81 }
madcowswe 0:a0285293f6a6 82
madcowswe 0:a0285293f6a6 83 /*************************************************************************/
madcowswe 0:a0285293f6a6 84
madcowswe 0:a0285293f6a6 85 /// Returns all elements in Matrix as a single Row vector.
madcowswe 0:a0285293f6a6 86 const Matrix Matrix::ToPackedVector( const Matrix& Mat )
madcowswe 0:a0285293f6a6 87 {
madcowswe 0:a0285293f6a6 88
madcowswe 0:a0285293f6a6 89 Matrix Crushed( 1, Mat._nRows * Mat._nCols );
madcowswe 0:a0285293f6a6 90
madcowswe 0:a0285293f6a6 91 int cont = 0;
madcowswe 0:a0285293f6a6 92
madcowswe 0:a0285293f6a6 93 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 94 for( int j = 0; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 95 {
madcowswe 0:a0285293f6a6 96 Crushed._matrix[0][cont] = Mat._matrix[i][j];
madcowswe 0:a0285293f6a6 97 cont++;
madcowswe 0:a0285293f6a6 98 }
madcowswe 0:a0285293f6a6 99
madcowswe 0:a0285293f6a6 100 Crushed._pRow = Crushed._nRows;
madcowswe 0:a0285293f6a6 101 Crushed._pCol = Crushed._nCols;
madcowswe 0:a0285293f6a6 102
madcowswe 0:a0285293f6a6 103 return Crushed;
madcowswe 0:a0285293f6a6 104 }
madcowswe 0:a0285293f6a6 105
madcowswe 0:a0285293f6a6 106
madcowswe 0:a0285293f6a6 107
madcowswe 0:a0285293f6a6 108 /// To add (Insert) a Single Row to a Matrix.
madcowswe 0:a0285293f6a6 109 void Matrix::AddRow(Matrix& Mat, int index)
madcowswe 0:a0285293f6a6 110 {
madcowswe 0:a0285293f6a6 111 --index;
madcowswe 0:a0285293f6a6 112
madcowswe 0:a0285293f6a6 113 if( index > Mat._nRows + 1)
madcowswe 0:a0285293f6a6 114 {
madcowswe 0:a0285293f6a6 115 printf("\n\nERROR:\nRow out of Limits @ AddRow()\n");
madcowswe 0:a0285293f6a6 116
madcowswe 0:a0285293f6a6 117 }else{
madcowswe 0:a0285293f6a6 118
madcowswe 0:a0285293f6a6 119 Mat._nRows++;
madcowswe 0:a0285293f6a6 120 Mat._matrix.resize( Mat._nRows );
madcowswe 0:a0285293f6a6 121
madcowswe 0:a0285293f6a6 122 Mat._matrix[ Mat._nRows - 1 ].resize( Mat._nCols );
madcowswe 0:a0285293f6a6 123
madcowswe 0:a0285293f6a6 124 for( int i = Mat._nRows - 1; i > index; i-- )
madcowswe 0:a0285293f6a6 125 for( int j = 0; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 126 Mat._matrix[i][j] = Mat._matrix[i - 1][j];
madcowswe 0:a0285293f6a6 127
madcowswe 0:a0285293f6a6 128 for( int j = 0; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 129 Mat._matrix[index][j] = 0.0;
madcowswe 0:a0285293f6a6 130 }
madcowswe 0:a0285293f6a6 131 }
madcowswe 0:a0285293f6a6 132
madcowswe 0:a0285293f6a6 133
madcowswe 0:a0285293f6a6 134 void Matrix::AddRow(Matrix& Receip, const Matrix& Row, int index)
madcowswe 0:a0285293f6a6 135 {
madcowswe 0:a0285293f6a6 136 Matrix::AddRow( Receip, index ); //Make Room
madcowswe 0:a0285293f6a6 137
madcowswe 0:a0285293f6a6 138 --index;
madcowswe 0:a0285293f6a6 139 for( int i = 0; i < Receip._nCols; i++ )
madcowswe 0:a0285293f6a6 140 Receip._matrix[index][i] = Row._matrix[0][i]; //Copy Data.
madcowswe 0:a0285293f6a6 141
madcowswe 0:a0285293f6a6 142 }
madcowswe 0:a0285293f6a6 143
madcowswe 0:a0285293f6a6 144
madcowswe 0:a0285293f6a6 145 /// To add (Insert) a single Column to a Matrix
madcowswe 0:a0285293f6a6 146 void Matrix::AddCol( Matrix& Mat, int index )
madcowswe 0:a0285293f6a6 147 {
madcowswe 0:a0285293f6a6 148 --index;
madcowswe 0:a0285293f6a6 149
madcowswe 0:a0285293f6a6 150 if( index > Mat._nCols + 1 )
madcowswe 0:a0285293f6a6 151 {
madcowswe 0:a0285293f6a6 152 printf("\n\nERROR:\nRow out of Limits on AddCol()\n");
madcowswe 0:a0285293f6a6 153
madcowswe 0:a0285293f6a6 154 }else{
madcowswe 0:a0285293f6a6 155
madcowswe 0:a0285293f6a6 156
madcowswe 0:a0285293f6a6 157 Mat._nCols++;
madcowswe 0:a0285293f6a6 158 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 159 Mat._matrix[i].resize( Mat._nCols );
madcowswe 0:a0285293f6a6 160
madcowswe 0:a0285293f6a6 161 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 162 for( int j = Mat._nCols; j > index; j-- )
madcowswe 0:a0285293f6a6 163 Mat._matrix[i][j] = Mat._matrix[i][j - 1];
madcowswe 0:a0285293f6a6 164
madcowswe 0:a0285293f6a6 165 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 166 Mat._matrix[i][index] = 0.0;
madcowswe 0:a0285293f6a6 167
madcowswe 0:a0285293f6a6 168 }
madcowswe 0:a0285293f6a6 169 }
madcowswe 0:a0285293f6a6 170
madcowswe 0:a0285293f6a6 171
madcowswe 0:a0285293f6a6 172 void Matrix::AddCol(Matrix& Receip, const Matrix& Row, int index)
madcowswe 0:a0285293f6a6 173 {
madcowswe 0:a0285293f6a6 174 Matrix::AddCol( Receip, index ); // Make Rom
madcowswe 0:a0285293f6a6 175
madcowswe 0:a0285293f6a6 176 --index;
madcowswe 0:a0285293f6a6 177 for( int i = 0; i < Receip._nRows; i++ )
madcowswe 0:a0285293f6a6 178 Receip._matrix[i][index] = Row._matrix[i][0]; //Copy Data.
madcowswe 0:a0285293f6a6 179 }
madcowswe 0:a0285293f6a6 180
madcowswe 0:a0285293f6a6 181
madcowswe 0:a0285293f6a6 182 /// Delete a Single Column From Matrix.
madcowswe 0:a0285293f6a6 183 void Matrix::DeleteCol( Matrix& Mat, int Col)
madcowswe 0:a0285293f6a6 184 {
madcowswe 0:a0285293f6a6 185 --Col; // Because of Column zero.
madcowswe 0:a0285293f6a6 186
madcowswe 0:a0285293f6a6 187 if( Col > Mat._nCols )
madcowswe 0:a0285293f6a6 188 {
madcowswe 0:a0285293f6a6 189 printf("\n\nERROR:\nColumn out of Limits @ DeleteCol()\n");
madcowswe 0:a0285293f6a6 190
madcowswe 0:a0285293f6a6 191 }else{
madcowswe 0:a0285293f6a6 192
madcowswe 0:a0285293f6a6 193 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 194 for( int j = Col; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 195 Mat._matrix[i][j] = Mat._matrix[i][j+1];
madcowswe 0:a0285293f6a6 196
madcowswe 0:a0285293f6a6 197 // If adressing last element of Column,
madcowswe 0:a0285293f6a6 198 // wich no longer exists
madcowswe 0:a0285293f6a6 199 if( Mat._pCol == Mat._nCols )
madcowswe 0:a0285293f6a6 200 Mat._pCol--;
madcowswe 0:a0285293f6a6 201
madcowswe 0:a0285293f6a6 202 // Decrease one column
madcowswe 0:a0285293f6a6 203 Mat._nCols--;
madcowswe 0:a0285293f6a6 204
madcowswe 0:a0285293f6a6 205 //Erase last Column
madcowswe 0:a0285293f6a6 206 for( int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 207 Mat._matrix[i].reserve(Mat._nCols);
madcowswe 0:a0285293f6a6 208
madcowswe 0:a0285293f6a6 209 }
madcowswe 0:a0285293f6a6 210 }
madcowswe 0:a0285293f6a6 211
madcowswe 0:a0285293f6a6 212
madcowswe 0:a0285293f6a6 213 /// Delete a Single Row form Matrix
madcowswe 0:a0285293f6a6 214 void Matrix::DeleteRow(Matrix& Mat, int Row)
madcowswe 0:a0285293f6a6 215 {
madcowswe 0:a0285293f6a6 216 --Row;
madcowswe 0:a0285293f6a6 217
madcowswe 0:a0285293f6a6 218 if( Row > Mat._nRows )
madcowswe 0:a0285293f6a6 219 {
madcowswe 0:a0285293f6a6 220 printf("\n\nERROR:\nColumn out of Limits @ DeleteCol()\n");
madcowswe 0:a0285293f6a6 221
madcowswe 0:a0285293f6a6 222 }else{
madcowswe 0:a0285293f6a6 223
madcowswe 0:a0285293f6a6 224 for( int i = Row; i < Mat._nRows - 1; i++ )
madcowswe 0:a0285293f6a6 225
madcowswe 0:a0285293f6a6 226 for( int j = 0; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 227 Mat._matrix[i][j] = Mat._matrix[i+1][j];
madcowswe 0:a0285293f6a6 228 Mat._nRows--;
madcowswe 0:a0285293f6a6 229 Mat._matrix.resize(Mat._nRows);
madcowswe 0:a0285293f6a6 230 }
madcowswe 0:a0285293f6a6 231 }
madcowswe 0:a0285293f6a6 232
madcowswe 0:a0285293f6a6 233 /*****************************************************************************************/
madcowswe 0:a0285293f6a6 234
madcowswe 0:a0285293f6a6 235 /// Extracts a single row form calling matrix and saves it to another matrix.
madcowswe 0:a0285293f6a6 236 const Matrix Matrix::ExportRow( const Matrix& Mat, int row )
madcowswe 0:a0285293f6a6 237 {
madcowswe 0:a0285293f6a6 238 --row;
madcowswe 0:a0285293f6a6 239
madcowswe 0:a0285293f6a6 240 if( row > Mat._nRows )
madcowswe 0:a0285293f6a6 241 {
madcowswe 0:a0285293f6a6 242 printf( "\n\nERROR:\nRow out of dimmensions @ GetRow\n"
madcowswe 0:a0285293f6a6 243 "Nothing Done.\n\n" );
madcowswe 0:a0285293f6a6 244
madcowswe 0:a0285293f6a6 245 }else{
madcowswe 0:a0285293f6a6 246
madcowswe 0:a0285293f6a6 247 Matrix SingleRow( 1 , Mat._nCols );
madcowswe 0:a0285293f6a6 248 SingleRow.Clear();
madcowswe 0:a0285293f6a6 249
madcowswe 0:a0285293f6a6 250 for( int j = 0; j < Mat._nCols; j++ )
madcowswe 0:a0285293f6a6 251 SingleRow._matrix[0][j] = Mat._matrix[row][j];
madcowswe 0:a0285293f6a6 252
madcowswe 0:a0285293f6a6 253 SingleRow._pCol = SingleRow._nCols;
madcowswe 0:a0285293f6a6 254 SingleRow._pRow = 0;
madcowswe 0:a0285293f6a6 255
madcowswe 0:a0285293f6a6 256 return SingleRow;
madcowswe 0:a0285293f6a6 257 }
madcowswe 0:a0285293f6a6 258 }
madcowswe 0:a0285293f6a6 259
madcowswe 0:a0285293f6a6 260
madcowswe 0:a0285293f6a6 261 /// Extracts a single column form calling matrix and saves it to another matrix.
madcowswe 0:a0285293f6a6 262 const Matrix Matrix::ExportCol( const Matrix& Mat, int col )
madcowswe 0:a0285293f6a6 263 {
madcowswe 0:a0285293f6a6 264 --col;
madcowswe 0:a0285293f6a6 265
madcowswe 0:a0285293f6a6 266 if( col > Mat._nCols )
madcowswe 0:a0285293f6a6 267 {
madcowswe 0:a0285293f6a6 268 printf( "\n\nERROR:\nColumn out of dimmensions.\n"
madcowswe 0:a0285293f6a6 269 "Nothing Done.\n\n" );
madcowswe 0:a0285293f6a6 270 }else{
madcowswe 0:a0285293f6a6 271
madcowswe 0:a0285293f6a6 272 Matrix SingleCol( Mat._nRows, 1 );
madcowswe 0:a0285293f6a6 273 for(int i = 0; i < Mat._nRows; i++ )
madcowswe 0:a0285293f6a6 274 SingleCol._matrix[i][0] = Mat._matrix[i][col];
madcowswe 0:a0285293f6a6 275
madcowswe 0:a0285293f6a6 276 SingleCol._pCol = 0;
madcowswe 0:a0285293f6a6 277 SingleCol._pRow = SingleCol._nRows;
madcowswe 0:a0285293f6a6 278
madcowswe 0:a0285293f6a6 279 return SingleCol;
madcowswe 0:a0285293f6a6 280 }
madcowswe 0:a0285293f6a6 281 }
madcowswe 0:a0285293f6a6 282
madcowswe 0:a0285293f6a6 283
madcowswe 0:a0285293f6a6 284 /// Makes matrix Bigger!
madcowswe 0:a0285293f6a6 285 void Matrix::Resize( int Rows, int Cols )
madcowswe 0:a0285293f6a6 286 {
madcowswe 0:a0285293f6a6 287 _nRows = Rows; //Decreases one because internally
madcowswe 0:a0285293f6a6 288 _nCols = Cols; // Index starts at zero.
madcowswe 0:a0285293f6a6 289
madcowswe 0:a0285293f6a6 290 _matrix.resize( _nRows );
madcowswe 0:a0285293f6a6 291
madcowswe 0:a0285293f6a6 292 for( int i = 0; i< _nRows ; i++ )
madcowswe 0:a0285293f6a6 293 _matrix[i].resize(_nCols);
madcowswe 0:a0285293f6a6 294
madcowswe 0:a0285293f6a6 295 _pRow = 0; // If matrix is resized the <<
madcowswe 0:a0285293f6a6 296 _pCol = 0; // operator overwrites everything!
madcowswe 0:a0285293f6a6 297 }
madcowswe 0:a0285293f6a6 298
madcowswe 0:a0285293f6a6 299
madcowswe 0:a0285293f6a6 300 /// Ask user for elemnts in Matrix
madcowswe 0:a0285293f6a6 301 void Matrix::FillMatrix()
madcowswe 0:a0285293f6a6 302 {
madcowswe 0:a0285293f6a6 303 for(int i = 0; i < _nRows; i++)
madcowswe 0:a0285293f6a6 304 {
madcowswe 0:a0285293f6a6 305 for(int j = 0; j < _nCols; j++)
madcowswe 0:a0285293f6a6 306 {
madcowswe 0:a0285293f6a6 307 printf( "Position [%u][%u]: ", i, j );
madcowswe 0:a0285293f6a6 308 float numero;
madcowswe 0:a0285293f6a6 309 scanf( "%f", &numero );
madcowswe 0:a0285293f6a6 310 printf("%.3f ", numero);
madcowswe 0:a0285293f6a6 311 this->_matrix[i][j] = numero;
madcowswe 0:a0285293f6a6 312 }
madcowswe 0:a0285293f6a6 313 printf("\n");
madcowswe 0:a0285293f6a6 314 }
madcowswe 0:a0285293f6a6 315 printf("\n");
madcowswe 0:a0285293f6a6 316
madcowswe 0:a0285293f6a6 317 _pRow = _nRows;
madcowswe 0:a0285293f6a6 318 _pCol = _nCols;
madcowswe 0:a0285293f6a6 319 }
madcowswe 0:a0285293f6a6 320
madcowswe 0:a0285293f6a6 321
madcowswe 0:a0285293f6a6 322 /// Prints out Matrix.
madcowswe 0:a0285293f6a6 323 void Matrix::print() const
madcowswe 0:a0285293f6a6 324 {
madcowswe 0:a0285293f6a6 325 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 326 {
madcowswe 0:a0285293f6a6 327 for( int j = 0; j < _nCols; j++ )
madcowswe 0:a0285293f6a6 328 {
madcowswe 0:a0285293f6a6 329 printf( "%.3f, ",_matrix[i][j] );
madcowswe 0:a0285293f6a6 330
madcowswe 0:a0285293f6a6 331 }
madcowswe 0:a0285293f6a6 332 printf( "\n" );
madcowswe 0:a0285293f6a6 333 }
madcowswe 0:a0285293f6a6 334 }
madcowswe 0:a0285293f6a6 335
madcowswe 0:a0285293f6a6 336
madcowswe 0:a0285293f6a6 337 /// Fills matrix with zeros.
madcowswe 0:a0285293f6a6 338 void Matrix::Clear()
madcowswe 0:a0285293f6a6 339 {
madcowswe 0:a0285293f6a6 340 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 341 for( int j = 0; j < _nCols; j++ )
madcowswe 0:a0285293f6a6 342 _matrix[i][j] = 0;
madcowswe 0:a0285293f6a6 343
madcowswe 0:a0285293f6a6 344 _pCol = 0; // New data can be added
madcowswe 0:a0285293f6a6 345 _pRow = 0;
madcowswe 0:a0285293f6a6 346 }
madcowswe 0:a0285293f6a6 347
madcowswe 0:a0285293f6a6 348 /********************************************************************************/
madcowswe 0:a0285293f6a6 349
madcowswe 0:a0285293f6a6 350
madcowswe 0:a0285293f6a6 351 /// Inserts a Single element in a desired Position( Index starts at [1][1] );
madcowswe 0:a0285293f6a6 352 void Matrix::add(int Row, int Col, float number)
madcowswe 0:a0285293f6a6 353 {
madcowswe 0:a0285293f6a6 354 --Col; --Row;
madcowswe 0:a0285293f6a6 355
madcowswe 0:a0285293f6a6 356 if( Row > _nRows || Col > _nCols )
madcowswe 0:a0285293f6a6 357 {
madcowswe 0:a0285293f6a6 358 printf("\n\nERROR:\nOut of limits of Matrix @ mat.Add()");
madcowswe 0:a0285293f6a6 359
madcowswe 0:a0285293f6a6 360 }else{
madcowswe 0:a0285293f6a6 361 _matrix[Row][Col] = number;
madcowswe 0:a0285293f6a6 362 }
madcowswe 0:a0285293f6a6 363 }
madcowswe 0:a0285293f6a6 364
madcowswe 0:a0285293f6a6 365
madcowswe 0:a0285293f6a6 366 /// Adds all elements in matrix and returns the answer.
madcowswe 0:a0285293f6a6 367 float Matrix::sum() const
madcowswe 0:a0285293f6a6 368 {
madcowswe 0:a0285293f6a6 369 float total = 0;
madcowswe 0:a0285293f6a6 370
madcowswe 0:a0285293f6a6 371 for( int i = 0; i < _nRows; i++ )
madcowswe 0:a0285293f6a6 372 for( int j = 0; j < _nCols; j++ )
madcowswe 0:a0285293f6a6 373 total += _matrix[i][j];
madcowswe 0:a0285293f6a6 374 return total;
madcowswe 0:a0285293f6a6 375 }
madcowswe 0:a0285293f6a6 376
madcowswe 0:a0285293f6a6 377
madcowswe 0:a0285293f6a6 378 /// Returns the specified element. Index Starts at [1][1].
madcowswe 0:a0285293f6a6 379 float Matrix::getNumber( int Row, int Col ) const
madcowswe 0:a0285293f6a6 380 { return this->_matrix[Row -1][Col - 1]; }
madcowswe 0:a0285293f6a6 381
madcowswe 0:a0285293f6a6 382 /// Returns the number of Rows in Matrix.
madcowswe 0:a0285293f6a6 383 int Matrix::getRows() const{ return this->_nRows; }
madcowswe 0:a0285293f6a6 384
madcowswe 0:a0285293f6a6 385
madcowswe 0:a0285293f6a6 386 /// Returns the number of Columns in Matrix.
madcowswe 0:a0285293f6a6 387 int Matrix::getCols() const{ return this->_nCols; }