1 #ifndef CMR_MATRIX_INTERNAL_H
2 #define CMR_MATRIX_INTERNAL_H
64 class matrix_binary_pivot_exception:
public std::exception
67 const char* what()
const throw ()
69 return "Cannot pivot on a zero entry!";
82 template <
typename MatrixType>
83 inline void matrix_set_value(MatrixType& matrix,
size_t row,
size_t column,
typename MatrixType::value_type value)
85 matrix(row, column) = value;
92 template <
typename MatrixType>
93 inline void matrix_set_value(
const MatrixType& matrix,
size_t row,
size_t column,
typename MatrixType::value_type value)
111 template <
typename MatrixType>
114 typedef typename MatrixType::value_type value_type;
115 const value_type& base_value = matrix(i, j);
119 throw matrix_binary_pivot_exception();
122 for (
size_t row = 0; row < matrix.size1(); ++row)
128 const value_type& first = matrix(row, j);
134 for (
size_t column = 0; column < matrix.size2(); ++column)
140 const value_type& second = matrix(i, column);
145 matrix(row, column) = 1 - matrix(row, column);
158 template <
typename MatrixType>
159 void matrix_ternary_pivot(MatrixType& matrix,
size_t i,
size_t j)
161 typedef typename MatrixType::value_type value_type;
162 const value_type& base_value = matrix(i, j);
166 throw matrix_binary_pivot_exception();
169 for (
size_t row = 0; row < matrix.size1(); ++row)
175 const value_type& first = matrix(row, j);
181 for (
size_t column = 0; column < matrix.size2(); ++column)
187 const value_type& second = matrix(i, column);
192 value_type value = matrix(row, column) - first * second / base_value;
197 matrix(row, column) = value;
214 template <
typename MatrixType,
typename PropertyCheck>
215 inline size_t matrix_count_property_row_series(
const MatrixType& matrix,
size_t row_first,
size_t row_beyond,
size_t column_first,
216 size_t column_beyond, PropertyCheck check)
218 for (
size_t row = row_first; row < row_beyond; ++row)
220 for (
size_t column = column_first; column < column_beyond; ++column)
221 check(matrix(row, column));
223 return row - row_first;
225 return row_beyond - row_first;
240 template <
typename MatrixType,
typename PropertyCheck>
241 inline size_t matrix_count_property_column_series(
const MatrixType& matrix,
size_t row_first,
size_t row_beyond,
size_t column_first,
242 size_t column_beyond, PropertyCheck check)
244 matrix_transposed <const MatrixType> transposed(matrix);
245 return matrix_count_property_row_series(transposed, column_first, column_beyond, row_first, row_beyond, check);
254 template <
typename MatrixType>
255 inline void matrix_print(
const MatrixType& matrix)
257 for (
size_t row = 0; row < matrix.size1(); ++row)
259 for (
size_t column = 0; column < matrix.size2(); ++column)
261 std::cout <<
" " << std::setw(2) << matrix(row, column);
265 std::cout << std::flush;
276 template <
typename MatrixType1,
typename MatrixType2>
277 inline bool matrix_equals(
const MatrixType1& matrix1,
const MatrixType2& matrix2)
279 if (matrix1.size1() != matrix2.size1())
281 if (matrix1.size2() != matrix2.size2())
284 for (
size_t row = 0; row < matrix1.size1(); ++row)
286 for (
size_t column = 0; column < matrix1.size2(); ++column)
288 if (matrix1(row, column) != matrix2(row, column))
CMR_ERROR
Type for return codes of library functions.
Definition: env.h:27
#define CMR_UNUSED(x)
Definition: env_internal.h:8
Functionality for sparse matrices.
CMR_ERROR CMRsortSubmatrix(CMR *cmr, CMR_SUBMAT *submatrix)
Sorts the row and column indices of submatrix.
Definition: matrix.c:248
CMR_ERROR CMRchrmatFilter(CMR *cmr, CMR_CHRMAT *matrix, size_t numRows, size_t *rows, size_t numColumns, size_t *columns, CMR_CHRMAT **presult)
Creates a numRows numColumns submatrix of the char matrix indexed by rows and columns.
Definition: matrix.c:2369
Definition: algorithm.hpp:14
void matrix_set_value(matrix_permuted< MatrixType > &matrix, size_t row, size_t column, typename MatrixType::value_type value)
Definition: matrix_permuted.hpp:168
void matrix_binary_pivot(matrix_permuted< MatrixType > &matrix, size_t i, size_t j)
Definition: matrix_permuted.hpp:224
Row-wise representation of sparse char matrix.
Definition: matrix.h:204
Definition: env_internal.h:45
Abstract struct for row-wise representations of sparse matrices.
Definition: matrix_internal.h:15
size_t numColumns
Number of columns.
Definition: matrix_internal.h:17
size_t * entryColumns
Array mapping each entry to its column.
Definition: matrix_internal.h:20
size_t * rowSlice
Array mapping each row to the index of its first entry.
Definition: matrix_internal.h:19
size_t numRows
Number of rows.
Definition: matrix_internal.h:16
void * entryValues
Array mapping each entry to its value.
Definition: matrix_internal.h:21
size_t numNonzeros
Number of and memory allocated for nonzeros.
Definition: matrix_internal.h:18
Row and column indices for a submatrix.
Definition: matrix.h:28