diff options
author | Jasper | 2025-09-01 20:10:12 +0200 |
---|---|---|
committer | Jasper | 2025-09-01 20:10:12 +0200 |
commit | bc4215edfd34590c8078b3bb459005807d36c5cf (patch) | |
tree | b94cf727dbdb86e5ef0a03d20dbf1cc4ea57c0ee | |
parent | b780a32d53e718328ab496c37cbb2710254da6d2 (diff) |
Merge row-swap and col-swap
-rw-r--r-- | matrix.c | 64 | ||||
-rw-r--r-- | matrix.h | 11 |
2 files changed, 37 insertions, 38 deletions
@@ -121,53 +121,49 @@ Matrix *matrix_copy (const Matrix *mat) return tmp; } -Matrix *matrix_swap_rows(const Matrix *mat, size_t i, size_t j) +Matrix *matrix_swap(const Matrix *mat, MatrixSwapType t, size_t i, size_t j) { Matrix *tmp = matrix_copy(mat); + size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m); - for (size_t k = 0; k < mat->n; ++k) + for (size_t k = 0; k < lim; ++k) { - matrix_at(tmp, i, k) = matrix_at(mat, j, k); - matrix_at(tmp, j, k) = matrix_at(mat, i, k); + switch (t) + { + case MATRIX_SWAP_ROWS: + matrix_at(tmp, i, k) = matrix_at(mat, j, k); + matrix_at(tmp, j, k) = matrix_at(mat, i, k); + break; + case MATRIX_SWAP_COLS: + matrix_at(tmp, k, i) = matrix_at(mat, k, j); + matrix_at(tmp, k, j) = matrix_at(mat, k, i); + break; + } } return tmp; } -void matrix_swap_rows1(Matrix *mat, size_t i, size_t j) +void matrix_swap1(Matrix *mat, MatrixSwapType t, size_t i, size_t j) { double tmp; + size_t lim = (t == MATRIX_SWAP_ROWS ? mat->n : mat->m); - 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) + for (size_t k = 0; k < lim; ++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; + switch (t) + { + case MATRIX_SWAP_ROWS: + tmp = matrix_at(mat, i, k); + matrix_at(mat, i, k) = matrix_at(mat, j, k); + matrix_at(mat, j, k) = tmp; + break; + case MATRIX_SWAP_COLS: + tmp = matrix_at(mat, k, i); + matrix_at(mat, k, i) = matrix_at(mat, k, j); + matrix_at(mat, k, j) = tmp; + break; + } } } @@ -16,6 +16,11 @@ typedef enum { MATRIX_NONE } MatrixType; +typedef enum { + MATRIX_SWAP_ROWS, + MATRIX_SWAP_COLS +} MatrixSwapType; + typedef struct { double *xs; size_t m; @@ -32,10 +37,8 @@ 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); +Matrix *matrix_swap(const Matrix *mat, MatrixSwapType t, size_t i, size_t j); +void matrix_swap1(Matrix *mat, MatrixSwapType t, 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); |