5#include "GaussJordan.h"
9class VectorMatrix :
public Matrix<T>
13 std::vector<std::vector<T> > _matrix;
15 void setMatrix(
const std::vector<std::vector<T> > *matrix);
19 VectorMatrix(std::vector<std::vector<T> > matrix);
20 VectorMatrix(
int nRows = 0,
int nCols = 0);
24 void resize(
int nRow,
int nCol);
25 T getElement(
int i,
int j)
const;
26 void setElement(
int i,
int j, T value);
29 std::vector<std::vector<T> > getMatrix();
31 std::vector<std::vector<T> > getMatrix()
const;
35 Matrix<T>* operator*(
const Matrix<T>* RHS);
36 Matrix<T>* operator+(
const Matrix<T>* RHS);
37 Matrix<T>* operator-(
const Matrix<T>* RHS);
38 void operator=(
const VectorMatrix<T>* RHS);
44VectorMatrix<T>::VectorMatrix(std::vector<std::vector<T> > matrix) : Matrix<T>()
51VectorMatrix<T>::VectorMatrix(
int nRows,
int nCols) : Matrix<T>()
53 for(
int i = 0; i < nRows; i++)
56 _matrix.push_back(temp);
58 for(
int j = 0; j < nCols; j++)
60 _matrix[i].push_back(0);
66VectorMatrix<T>::~VectorMatrix()
73void VectorMatrix<T>::resize(
int nRow,
int nCol)
79 if(nRow > _matrix.size() )
85 for(
int i = 0; i < _matrix.size(); i++)
87 if(_matrix[i].size() < nCol)
101 for(
int i = 0; i < _matrix.size(); i++)
103 if(_matrix[i].size() < nCol)
105 while(_matrix[i].size() != nCol)
106 _matrix[i].push_back(0);
111 if(nRow > _matrix.size())
113 int amount = nRow - _matrix.size();
114 for(
int i = 0; i < amount; i++)
120 while(currentNum != nCol)
125 _matrix.push_back(vec);
134 typename std::vector<std::vector<T> >::iterator start;
135 typename std::vector<T>::iterator colStart;
138 if(nRow <_matrix.size())
140 start = _matrix.begin() + nRow;
141 _matrix.erase(start, _matrix.end() );
145 for(
int i = 0; i < _matrix.size(); i++)
147 if(_matrix[i].size() > nCol)
149 colStart = _matrix[i].begin() + nCol;
150 _matrix[i].erase(colStart, _matrix[i].end() );
158void VectorMatrix<T>::invert()
160 std::vector<std::vector<T> > dummy;
165T VectorMatrix<T>::getElement(
int i,
int j)
const
167 return _matrix[i][j];
172void VectorMatrix<T>::setElement(
int i,
int j, T value)
174 _matrix[i][j] = value;
179std::vector<std::vector<T> > VectorMatrix<T>::getMatrix()
const
185std::vector<std::vector<T> > VectorMatrix<T>::getMatrix()
191void VectorMatrix<T>::setMatrix(
const std::vector<std::vector<T> >* matrix)
198void VectorMatrix<T>::setZero()
200 for(
int i = 0; i < _matrix.size(); i++)
202 for(
int j = 0; j < _matrix.size(); j++)
210int VectorMatrix<T>::getSize()
const
212 return _matrix.size();
217Matrix<T>* VectorMatrix<T>::operator*(
const Matrix<T>* RHS)
219 if(_matrix.size() != RHS->getSize() || _matrix.size() != RHS->getSize())
222 VectorMatrix<T> *result =
new VectorMatrix<T>();
223 result->resize(_matrix.size(), _matrix.size());
226 for(
int row = 0; row < _matrix.size(); row++)
229 for(
int element = 0; element < _matrix[row].size(); element++)
232 for(
int i = 0; i < _matrix.size(); i++)
234 result->setElement(row, element, (result->getElement(row, element) ) + _matrix[row][i] * RHS->getElement(i,element));
245Matrix<T>* VectorMatrix<T>::operator+(
const Matrix<T>* RHS)
247 if(_matrix.size() != RHS->getSize() || _matrix.size() != RHS->getSize())
250 VectorMatrix<T> *result =
new VectorMatrix<T>();
251 result->resize(_matrix.size(), _matrix.size());
254 for(
int row = 0; row < _matrix.size(); row++)
257 for(
int element = 0; element < _matrix[row].size(); element++)
259 result->setElement(row, element, _matrix[row][element] + RHS->getElement(row, element) );
268Matrix<T>* VectorMatrix<T>::operator-(
const Matrix<T>* RHS)
270 if(_matrix.size() != RHS->getSize() || _matrix.size() != RHS->getSize())
273 VectorMatrix<T> *result =
new VectorMatrix<T>();
274 result->resize(_matrix.size(), _matrix.size());
277 for(
int row = 0; row < _matrix.size(); row++)
280 for(
int element = 0; element < _matrix[row].size(); element++)
282 result->setElement(row, element, _matrix[row][element] - RHS->getElement(row, element) );
291void VectorMatrix<T>::operator=(
const VectorMatrix<T>* RHS)
293 if(_matrix.size() != RHS->getSize())
294 this->resize(RHS->getSize(), RHS->getSize() );
296 for(
int i = 0; i < _matrix.size(); i++)
298 for(
int j = 0; j < _matrix.size(); j++)
300 setElement(i, j, RHS->getElement(i, j) );
T GaussJordan(std::vector< std::vector< T > > &a, std::vector< std::vector< U > > &b, int nrow=-1, double singular_threshold=0.0, std::vector< const char * > *names=0)
Definition GaussJordan.h:44