From b780a32d53e718328ab496c37cbb2710254da6d2 Mon Sep 17 00:00:00 2001 From: Jasper Date: Mon, 1 Sep 2025 09:42:02 +0200 Subject: Added functions to swap rows and cols --- matrix.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'matrix.c') diff --git a/matrix.c b/matrix.c index 4bcbf88..c04b91b 100644 --- a/matrix.c +++ b/matrix.c @@ -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"); -- cgit v1.2.3