32 lines
913 B
C++
32 lines
913 B
C++
#include "Solver.h"
|
|
|
|
Solver::Solver(const Matrix& mat) : m_Matrix(mat) {}
|
|
|
|
Vect Solver::Image() const {
|
|
Matrix result = m_Matrix;
|
|
result.Transpose();
|
|
result.GaussJordan(true);
|
|
result.Transpose();
|
|
return {result};
|
|
}
|
|
|
|
// https://en.wikipedia.org/wiki/Kernel_(linear_algebra)#Computation_by_Gaussian_elimination
|
|
Vect Solver::Noyau() const {
|
|
Matrix result = m_Matrix;
|
|
result.Transpose();
|
|
result.Augmenter(Matrix::Identity(result.GetRawCount()));
|
|
result.GaussJordan(true);
|
|
result.Transpose();
|
|
|
|
// nombre de colonnes non nulles
|
|
std::size_t origine_colonne = Vect(result.SubMatrix(0, 0, m_Matrix.GetRawCount(), m_Matrix.GetColumnCount())).GetCardinal();
|
|
|
|
return {result.SubMatrix(m_Matrix.GetRawCount(), origine_colonne, result.GetRawCount() - m_Matrix.GetRawCount(),
|
|
result.GetColumnCount() - origine_colonne)};
|
|
}
|
|
|
|
std::size_t Solver::Rang() const {
|
|
Vect image = Image();
|
|
return image.GetCardinal();
|
|
}
|