From 2df8387cf4d82386a5a66df34f43b4c08bfeb2d8 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Wed, 27 Jul 2022 10:39:42 +0200 Subject: [PATCH] Add elementary row operations --- matrix.hpp | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/matrix.hpp b/matrix.hpp index bdf8ba3..3f844af 100644 --- a/matrix.hpp +++ b/matrix.hpp @@ -1,5 +1,7 @@ #pragma once +#include "cnumber.hpp" #include "vector.hpp" +#include #include #include #include @@ -73,14 +75,40 @@ public: if (!m.is_invertible()) { m.err = true; } else { - for (uint64_t i = 0; i < m.get_num_entries(); i++) { - } } return m; } + + // switch row i with row j + const matrix exchange_row(uint64_t i, uint64_t j) { + matrix m = *this; + vector v = m.get_entry(i); + m[i] = m[j]; + m[j] = v; + return m; + } + // subtract row i from row j + const matrix subtract_row(uint64_t i, uint64_t j, cnumber multiplier = 1) { + matrix m = *this; + m[j] = m[j] - (m.multiply_row(i, multiplier)[i]); + return m; + } + // add row i to row j + const matrix add_row(uint64_t i, uint64_t j, cnumber multiplier = 1) { + matrix m = *this; + m[j] = m[j] + (m.multiply_row(i, multiplier)[i]); + return m; + } + + // Multiply row by z + const matrix multiply_row(uint64_t i, cnumber z) { + matrix m = *this; + m[i] = m[i] * z; + return m; + } const vector get_entry(uint64_t index) const { return this->entries[index]; } - const vector get_row(uint64_t index) const { + const vector get_column(uint64_t index) const { vector v(this->entry_dimension); for (uint64_t j = 0; j < this->entry_dimension; j++) { v[j] = this->entries[j][index]; @@ -246,7 +274,7 @@ public: } for (uint64_t i = 0; i < this->entry_dimension; i++) { for (uint64_t j = 0; j < this->entry_dimension; j++) { - n[i][j] = this->get_entry(i) * m.get_row(j); + n[i][j] = this->get_entry(i) * m.get_column(j); } }