diff options
author | Jasper | 2025-09-01 09:42:02 +0200 |
---|---|---|
committer | Jasper | 2025-09-01 09:42:02 +0200 |
commit | b780a32d53e718328ab496c37cbb2710254da6d2 (patch) | |
tree | 1463ad1c085b907899957e8b5330e351b761ad6a | |
parent | 093c1a4beb2d6c5f505dd97e81dc1a0b0bbba0d1 (diff) |
Added functions to swap rows and cols
-rw-r--r-- | matrix.c | 50 | ||||
-rw-r--r-- | matrix.h | 4 |
2 files changed, 54 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"); @@ -32,6 +32,10 @@ char *matrix_to_str(const Matrix *mat); Matrix *matrix_id(size_t n); Matrix *matrix_const(size_t m, size_t n, double x); Matrix *matrix_copy (const Matrix *mat); +Matrix *matrix_swap_rows(const Matrix *mat, size_t i, size_t j); +void matrix_swap_rows1(Matrix *mat, size_t i, size_t j); +Matrix *matrix_swap_cols(const Matrix *mat, size_t i, size_t j); +void matrix_swap_cols1(const Matrix *mat, size_t i, size_t j); double matrix_trace(const Matrix *mat); Matrix *matrix_transpose(const Matrix *mat); Matrix *matrix_add(const Matrix *A, const Matrix *B); |