From 8c1c3d4f9ecb6e7038ca91f311bff1f1ed608d38 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Thu, 29 Feb 2024 22:24:42 +0100 Subject: [PATCH] add more doc --- {src => include}/Gauss.h | 5 ++ include/IO.h | 52 ++++++++++++++++++ include/Matrix.h | 113 ++++++++++++++++++++++++++++++++++++++ {src => include}/NR.h | 0 {src => include}/Solver.h | 7 ++- {src => include}/Vect.h | 7 ++- src/IO.h | 19 ------- src/Matrix.cpp | 6 -- src/Matrix.h | 49 ----------------- 9 files changed, 182 insertions(+), 76 deletions(-) rename {src => include}/Gauss.h (80%) create mode 100644 include/IO.h create mode 100644 include/Matrix.h rename {src => include}/NR.h (100%) rename {src => include}/Solver.h (83%) rename {src => include}/Vect.h (93%) delete mode 100644 src/IO.h delete mode 100644 src/Matrix.h diff --git a/src/Gauss.h b/include/Gauss.h similarity index 80% rename from src/Gauss.h rename to include/Gauss.h index 5116a27..ab4873b 100644 --- a/src/Gauss.h +++ b/include/Gauss.h @@ -1,5 +1,10 @@ #pragma once +/** + * \file Gauss.h + * \brief Contient la définition de l'algorithme de Gauss + */ + class Matrix; namespace Gauss { diff --git a/include/IO.h b/include/IO.h new file mode 100644 index 0000000..01d6d45 --- /dev/null +++ b/include/IO.h @@ -0,0 +1,52 @@ +#pragma once + +/** + * \file IO.h + * \brief Contient des fonctions utiles pour travailler avec les systèmes d'entrée et de sortie + */ + +#include + +class Matrix; +class Vect; +class VectAffine; + +std::ostream& operator<<(std::ostream& stream, const Matrix& mat); +std::istream& operator>>(std::istream& stream, Matrix& mat); + +/** + * \brief Charge une matrice à partir d'un fichier + * \param fileName Le chemin du fichier à charger + * \return Une matrice de taille nulle si une erreur intervient + */ +Matrix LoadMatrix(const std::string& fileName); + +/** + * \brief Sauvegarde une matrice dans un fichier + * \param mat La matrice à sauver + * \param fileName Le chemin du fichier à écrire + */ +void SaveMatrix(const Matrix& mat, const std::string& fileName); + +/** + * \brief Permet de saisir une matrice à partir de la console + */ +Matrix InsertMatrix(); + +/** + * \brief Affiche une matrice dans la console + * \param mat La matrice à afficher + */ +void Print(const Matrix& mat); + +/** + * \brief Affiche un espace vectoriel dans la console + * \param vect L'espace vectoriel à afficher + */ +void Print(const Vect& vect); + +/** + * \brief Affiche un espace affine dans la console + * \param vect L'espace affine à afficher + */ +void Print(const VectAffine& vect); \ No newline at end of file diff --git a/include/Matrix.h b/include/Matrix.h new file mode 100644 index 0000000..142661e --- /dev/null +++ b/include/Matrix.h @@ -0,0 +1,113 @@ +#pragma once + +/** + * \file Matrix.h + * \brief Contient la définition d'une matrice + */ + +#include +#include +#include +#include + +/** + * \class Matrix + * \brief Représente une matrice d'éléments + */ +class Matrix { + public: + typedef long double Element; + + private: + std::size_t m_Raws; + std::size_t m_Columns; + std::vector m_Data; + + public: + /** + * \brief Constructeur par défaut. Crée une matrice de taille nulle + */ + Matrix() : m_Raws(0), m_Columns(0) {} + + /** + * \brief Construit une matrice de taille donnée + * \param raws Le nombre de lignes + * \param columns Le nombre de colonne + */ + Matrix(std::size_t raws, std::size_t columns); + + /** + * \brief Construit une matrice de taille donnée avec des éléments donnés + * \param raws Le nombre de lignes + * \param columns Le nombre de colonne + * \param initList Les élements à mettre + */ + Matrix(std::size_t raws, std::size_t columns, std::initializer_list&& initList); + + ~Matrix() {} + + /** + * \brief Retourne le nombre de ligne de la matrice + */ + std::size_t GetRawCount() const; + + /** + * \brief Retourne le nombre de colonne de la matrice + */ + std::size_t GetColumnCount() const; + + /** + * \brief Transpose la matrice + */ + void Transpose(); + + /** + * \brief Augmente la matrice actuelle avec une autre + * \param right Une matrice avec le bon nombre de lignes + * \pre GetRawCount() = right.GetRawCount() + */ + void Augment(const Matrix& right); + + /** + * \brief Retourne la sous-matrice spécifiée + * \param raw_origin L'indice de la première ligne de la matrice à récupérer + * \param column_origin L'indice de la première colonne de la matrice à récupérer + * \param raw Le nombre de lignes de la sous-matrice + * \param column Le nombre de colonnes de la sous-matrice + * \pre raw_origin + raw <= GetRawCount() + * \pre column_origin + column <= GetColumnCount() + */ + Matrix SubMatrix(std::size_t raw_origin, std::size_t column_origin, std::size_t raw, std::size_t column) const; + + bool operator==(const Matrix& other) const; + + /** + * \brief Effectue un produit matriciel + */ + Matrix operator*(const Matrix& other) const; + + /** + * \brief Retourne l'élément à l'indice recherché + * \param raw L'indice de la ligne + * \param column L'indice de la colonne + */ + Element& at(std::size_t raw, std::size_t column); + + /** + * \brief Retourne l'élément à l'indice recherché (version constante) + * \param raw L'indice de la ligne + * \param column L'indice de la colonne + */ + Element at(std::size_t raw, std::size_t column) const; + + /** + * \brief Construit une matrice identité de taille donnée + * \param size La taille de la matrice carrée + */ + static Matrix Identity(std::size_t size); +}; + +template +bool IsEqualZero(T var) { + return std::abs(var) < std::pow(10, -5); +} \ No newline at end of file diff --git a/src/NR.h b/include/NR.h similarity index 100% rename from src/NR.h rename to include/NR.h diff --git a/src/Solver.h b/include/Solver.h similarity index 83% rename from src/Solver.h rename to include/Solver.h index 5f6f5a7..bac80cd 100644 --- a/src/Solver.h +++ b/include/Solver.h @@ -1,5 +1,10 @@ #pragma once +/** + * \file Solver.h + * \brief Contient la définition du solutionneur + */ + #include "Vect.h" /** @@ -32,7 +37,7 @@ class Solver { Vect Kernel() const; /** - * \brief Résout le système triangulaire de la forme AX=B. + * \brief Résout le système triangulaire de la forme AX=B, avec X et B, des vecteurs colonne * La matrice d'entrée est considéré comme étant la matrice augmenté [A|B] * \return L'espace affine associé */ diff --git a/src/Vect.h b/include/Vect.h similarity index 93% rename from src/Vect.h rename to include/Vect.h index a771d05..b2bbb94 100644 --- a/src/Vect.h +++ b/include/Vect.h @@ -1,5 +1,10 @@ #pragma once +/** + * \file Vect.h + * \brief Contient la définition d'un espace affine et d'un espace vectoriel + */ + #include "Matrix.h" /** @@ -26,7 +31,7 @@ class Vect { Matrix GetVector(std::size_t index) const; /** - * \brief Retourne le nombre de coordonnées des vecteurs de la base (leur nombre de colonne) + * \brief Retourne le nombre de coordonnées des vecteurs de la base (leur nombre de colonne) */ std::size_t GetDimension() const; diff --git a/src/IO.h b/src/IO.h deleted file mode 100644 index 54732c6..0000000 --- a/src/IO.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include - -class Matrix; -class Vect; -class VectAffine; - -std::ostream& operator<<(std::ostream& stream, const Matrix& mat); -std::istream& operator>>(std::istream& stream, Matrix& mat); - -Matrix LoadMatrix(const std::string& fileName); -void SaveMatrix(const Matrix& mat, const std::string& fileName); - -Matrix InsertMatrix(); - -void Print(const Matrix& mat); -void Print(const Vect& vect); -void Print(const VectAffine& vect); \ No newline at end of file diff --git a/src/Matrix.cpp b/src/Matrix.cpp index c27919c..92eff63 100644 --- a/src/Matrix.cpp +++ b/src/Matrix.cpp @@ -17,8 +17,6 @@ Matrix::Matrix(std::size_t lignes, std::size_t colonnes, std::initializer_list -#include -#include -#include - -/** - * \class Matrix - * \brief Représente une matrice d'éléments -*/ -class Matrix { - public: - typedef long double Element; - - private: - std::size_t m_Raws; - std::size_t m_Columns; - std::vector m_Data; - - public: - Matrix() : m_Raws(0), m_Columns(0) {} - Matrix(std::size_t raws, std::size_t columns); - Matrix(std::size_t raws, std::size_t columns, std::initializer_list&& initList); - ~Matrix(); - - std::size_t GetRawCount() const; - std::size_t GetColumnCount() const; - - void Transpose(); - - static Matrix Identity(std::size_t size); - - void Augment(const Matrix& right); - - Matrix SubMatrix(std::size_t raw_origin, std::size_t column_origin, std::size_t raw, std::size_t column) const; - - bool operator==(const Matrix& other) const; - Matrix operator*(const Matrix& other) const; - Element& operator[](std::size_t index); - - Element& at(std::size_t raw, std::size_t column); - Element at(std::size_t raw, std::size_t column) const; -}; - -template -bool IsEqualZero(T var) { - return std::abs(var) < std::pow(10, -5); -} \ No newline at end of file