38 |
|
#include "Vector.hpp" |
39 |
|
|
40 |
|
namespace oopse { |
41 |
– |
const double epsilon = 0.000001; |
42 |
– |
|
43 |
– |
template<typename T> |
44 |
– |
inline bool equal(T e1, T e2) { |
45 |
– |
return e1 == e2; |
46 |
– |
} |
47 |
– |
|
48 |
– |
template<> |
49 |
– |
inline bool equal(float e1, float e2) { |
50 |
– |
return fabs(e1 - e2) < epsilon; |
51 |
– |
} |
41 |
|
|
53 |
– |
template<> |
54 |
– |
inline bool equal(double e1, double e2) { |
55 |
– |
return fabs(e1 - e2) < epsilon; |
56 |
– |
} |
57 |
– |
|
42 |
|
/** |
43 |
|
* @class RectMatrix RectMatrix.hpp "math/RectMatrix.hpp" |
44 |
|
* @brief rectangular matrix class |
412 |
|
for (unsigned int i = 0; i < Row; i++) |
413 |
|
for (unsigned int j = 0; j < Col; j++) |
414 |
|
for (unsigned int k = 0; k < SameDim; k++) |
415 |
< |
result(i, j) = m1(i, k) * m2(k, j); |
415 |
> |
result(i, j) += m1(i, k) * m2(k, j); |
416 |
|
|
417 |
|
return result; |
418 |
|
} |
448 |
|
|
449 |
|
return result; |
450 |
|
} |
451 |
+ |
|
452 |
+ |
/** |
453 |
+ |
* Write to an output stream |
454 |
+ |
*/ |
455 |
+ |
template<typename Real, unsigned int Row, unsigned int Col> |
456 |
+ |
std::ostream &operator<< ( std::ostream& o, const RectMatrix<Real, Row, Col>& m) { |
457 |
+ |
for (unsigned int i = 0; i < Row ; i++) { |
458 |
+ |
o << "(" |
459 |
+ |
for (unsigned int j = 0; j < Col ; j++) { |
460 |
+ |
o << m(i, j) << "\t" |
461 |
+ |
} |
462 |
+ |
o << ")" << std::endl; |
463 |
+ |
} |
464 |
+ |
return o; |
465 |
+ |
} |
466 |
|
} |
467 |
|
#endif //MATH_RECTMATRIX_HPP |