less use of transpose
All checks were successful
Linux arm64 / Build (push) Successful in 1m26s

This commit is contained in:
2024-05-04 15:21:49 +02:00
parent 11cc0fadad
commit dc31f1f091
3 changed files with 33 additions and 11 deletions

View File

@@ -97,6 +97,25 @@ void Matrix::Augment(const Matrix& a_Right) {
*this = temp;
}
void Matrix::AugmentBottom(const Matrix& a_Bottom) {
assert(a_Bottom.m_Columns == m_Columns);
Matrix temp {m_Raws + a_Bottom.GetRawCount(), m_Columns};
for (std::size_t i = 0; i < m_Raws; i++) {
for (std::size_t j = 0; j < m_Columns; j++) {
temp.at(i, j) = at(i, j);
}
}
for (std::size_t i = 0; i < a_Bottom.GetRawCount(); i++) {
for (std::size_t j = 0; j < GetColumnCount(); j++) {
temp.at(i + GetRawCount(), j) = a_Bottom.at(i, j);
}
}
*this = temp;
}
Matrix Matrix::operator+(const Matrix& a_Other) const {
assert(GetColumnCount() == a_Other.GetColumnCount() && GetRawCount() == a_Other.GetRawCount());

View File

@@ -3,9 +3,7 @@
#include "Gauss.h"
Vect Solver::Image(Matrix&& a_Matrix) const {
a_Matrix.Transpose();
Gauss::GaussJordan(a_Matrix, true, true);
a_Matrix.Transpose();
Gauss::GaussJordanColumn(a_Matrix, true, true);
return {a_Matrix};
}
@@ -14,16 +12,14 @@ Vect Solver::Kernel(Matrix&& a_Matrix) const {
std::size_t matrixRawCount = a_Matrix.GetRawCount();
std::size_t matrixColumnCount = a_Matrix.GetColumnCount();
a_Matrix.Transpose();
a_Matrix.Augment(Matrix::Identity(a_Matrix.GetRawCount()));
Gauss::GaussJordan(a_Matrix, true, true);
a_Matrix.Transpose();
a_Matrix.AugmentBottom(Matrix::Identity(a_Matrix.GetColumnCount()));
Gauss::GaussJordanColumn(a_Matrix, true, true);
// nombre de colonnes non nulles
std::size_t origine_colonne = Vect(a_Matrix.SubMatrix(0, 0, matrixRawCount, matrixColumnCount)).GetCardinal();
return {a_Matrix.SubMatrix(matrixRawCount, origine_colonne, a_Matrix.GetRawCount() - matrixRawCount,
a_Matrix.GetColumnCount() - origine_colonne)};
return {a_Matrix.SubMatrix(
matrixRawCount, origine_colonne, a_Matrix.GetRawCount() - matrixRawCount, a_Matrix.GetColumnCount() - origine_colonne)};
}
VectAffine Solver::RectangularSystem(Matrix&& a_MatrixA, const Matrix& a_VectorB) const {