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 /matrix.c | |
parent | 093c1a4beb2d6c5f505dd97e81dc1a0b0bbba0d1 (diff) |
Added functions to swap rows and cols
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"); |