diff options
Diffstat (limited to 'matrix.c')
-rw-r--r-- | matrix.c | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -121,6 +121,56 @@ Matrix *matrix_copy (const Matrix *mat) return tmp; } +Matrix *matrix_swap_rows(const Matrix *mat, size_t i, size_t j) +{ + Matrix *tmp = matrix_copy(mat); + + for (size_t k = 0; k < mat->n; ++k) + { + matrix_at(tmp, i, k) = matrix_at(mat, j, k); + matrix_at(tmp, j, k) = matrix_at(mat, i, k); + } + + return tmp; +} + +void matrix_swap_rows1(Matrix *mat, size_t i, size_t j) +{ + double tmp; + + for (size_t k = 0; k < mat->n; ++k) + { + tmp = matrix_at(mat, i, k); + matrix_at(mat, i, k) = matrix_at(mat, j, k); + matrix_at(mat, j, k) = tmp; + } +} + +Matrix *matrix_swap_cols(const Matrix *mat, size_t i, size_t j) +{ + Matrix *tmp = matrix_copy(mat); + + for (size_t k = 0; k < mat->m; ++k) + { + matrix_at(tmp, k, i) = matrix_at(mat, k, j); + matrix_at(tmp, k, j) = matrix_at(mat, k, i); + } + + return tmp; +} + +void matrix_swap_cols1(const Matrix *mat, size_t i, size_t j) +{ + double x; + + for (size_t k = 0; k < mat->m; ++k) + { + x = matrix_at(mat, k, i); + matrix_at(mat, k, i) = matrix_at(mat, k, j); + matrix_at(mat, k, j) = x; + } +} + double matrix_trace(const Matrix *mat) { assert(matrix_is_square(mat) && "Trace is not defined for non-square matrices"); |