21#ifndef __EVT_MATRIX_HH__
22#define __EVT_MATRIX_HH__
58 for (
int row = 0; row <
m_range; row++ )
63 m_mat =
new T*[range];
64 for (
int row = 0; row < range; row++ )
65 m_mat[row] =
new T[range];
72 for (
int row = 0; row <
m_range; row++ )
73 for (
int col = 0; col <
m_range; col++ )
80 for (
int row = 0; row <
m_range; row++ )
88 std::ostringstream str;
90 for (
int row = 0; row <
m_range; row++ ) {
92 for (
int col = 0; col <
m_range; col++ )
93 str <<
"\t" <<
m_mat[row][col];
94 str <<
"\t|" << std::endl;
113 for (
int col = 0; col <
m_range; col++ ) {
115 sum += std::pow( -1., col ) *
m_mat[0][col] * minor->
det();
131 for (
int r = 0; r <
m_range; r++ )
132 for (
int c = 0; c <
m_range; c++ )
133 if ( ( r != row ) && ( c != col ) ) {
134 ( *minor )( minIndex / (
m_range - 1 ),
149 std::cerr <<
"This matrix has a null determinant and cannot be inverted. Returning zero matrix."
151 for (
int row = 0; row <
m_range; row++ )
152 for (
int col = 0; col <
m_range; col++ )
153 ( *inv )( row, col ) = 0.;
157 T determinant =
det();
159 for (
int row = 0; row <
m_range; row++ )
160 for (
int col = 0; col <
m_range; col++ ) {
162 inv->
m_mat[col][row] = std::pow( -1., row + col ) * minor->
det() /
175 std::cerr <<
"These matrices cannot be multiplied." << std::endl;
183 for (
int row = 0; row < left.
m_range; row++ )
184 for (
int col = 0; col < right.
m_range; col++ )
185 ( *mat )[row][col] = 0;
187 for (
int row = 0; row < left.
m_range; row++ )
188 for (
int col = 0; col < right.
m_range; col++ )
189 for (
int line = 0; line < right.
m_range; line++ )
190 ( *mat )[row][col] += left.
m_mat[row][line] *
191 right.
m_mat[line][col];
EvtMatrix< T > * operator*(const EvtMatrix< T > &left, const EvtMatrix< T > &right)
friend EvtMatrix< M > * operator*(const EvtMatrix< M > &left, const EvtMatrix< M > &right)
EvtMatrix * min(int row, int col)
T & operator()(int row, int col)