34 |
|
#ifndef MATH_RECTMATRIX_HPP |
35 |
|
#define MATH_RECTMATRIX_HPP |
36 |
|
|
37 |
+ |
#include <cmath> |
38 |
|
#include "Vector.hpp" |
39 |
|
|
40 |
|
namespace oopse { |
41 |
|
|
41 |
– |
template<typename T> |
42 |
– |
inline bool equal(T e1, T e2) { |
43 |
– |
return e1 == e2; |
44 |
– |
} |
45 |
– |
|
46 |
– |
template<> |
47 |
– |
inline bool equal(float e1, float e2) { |
48 |
– |
return e1 == e2; |
49 |
– |
} |
50 |
– |
|
51 |
– |
template<> |
52 |
– |
inline bool equal(double e1, double e2) { |
53 |
– |
return e1 == e2; |
54 |
– |
} |
55 |
– |
|
42 |
|
/** |
43 |
|
* @class RectMatrix RectMatrix.hpp "math/RectMatrix.hpp" |
44 |
|
* @brief rectangular matrix class |
153 |
|
} |
154 |
|
|
155 |
|
/** |
156 |
+ |
* swap two rows of this matrix |
157 |
+ |
* @param i the first row |
158 |
+ |
* @param j the second row |
159 |
+ |
*/ |
160 |
+ |
void swapRow(unsigned int i, unsigned int j){ |
161 |
+ |
assert(i < Row && j < Row); |
162 |
+ |
|
163 |
+ |
for (unsigned int k = 0; k < Col; k++) |
164 |
+ |
std::swap(data_[i][k], data_[j][k]); |
165 |
+ |
} |
166 |
+ |
|
167 |
+ |
/** |
168 |
+ |
* swap two colums of this matrix |
169 |
+ |
* @param i the first colum |
170 |
+ |
* @param j the second colum |
171 |
+ |
*/ |
172 |
+ |
void swapColum(unsigned int i, unsigned int j){ |
173 |
+ |
assert(i < Col && j < Col); |
174 |
+ |
|
175 |
+ |
for (unsigned int k = 0; k < Row; k++) |
176 |
+ |
std::swap(data_[k][i], data_[k][j]); |
177 |
+ |
} |
178 |
+ |
|
179 |
+ |
/** |
180 |
|
* Tests if this matrix is identical to matrix m |
181 |
|
* @return true if this matrix is equal to the matrix m, return false otherwise |
182 |
|
* @m matrix to be compared |
436 |
|
for (unsigned int i = 0; i < Row; i++) |
437 |
|
for (unsigned int j = 0; j < Col; j++) |
438 |
|
for (unsigned int k = 0; k < SameDim; k++) |
439 |
< |
result(i, j) = m1(i, k) * m2(k, j); |
439 |
> |
result(i, j) += m1(i, k) * m2(k, j); |
440 |
|
|
441 |
|
return result; |
442 |
|
} |
472 |
|
|
473 |
|
return result; |
474 |
|
} |
475 |
+ |
|
476 |
+ |
/** |
477 |
+ |
* Write to an output stream |
478 |
+ |
*/ |
479 |
+ |
template<typename Real, unsigned int Row, unsigned int Col> |
480 |
+ |
std::ostream &operator<< ( std::ostream& o, const RectMatrix<Real, Row, Col>& m) { |
481 |
+ |
for (unsigned int i = 0; i < Row ; i++) { |
482 |
+ |
o << "("; |
483 |
+ |
for (unsigned int j = 0; j < Col ; j++) { |
484 |
+ |
o << m(i, j); |
485 |
+ |
if (j != Col -1) |
486 |
+ |
o << "\t"; |
487 |
+ |
} |
488 |
+ |
o << ")" << std::endl; |
489 |
+ |
} |
490 |
+ |
return o; |
491 |
+ |
} |
492 |
|
} |
493 |
|
#endif //MATH_RECTMATRIX_HPP |