Compare commits

..

9 Commits

Author SHA1 Message Date
222d723675 improve matrix doc
All checks were successful
Linux arm64 / Build (push) Successful in 36s
2024-02-29 22:38:36 +01:00
e072d30995 better doc 2024-02-29 22:36:07 +01:00
bbcf3aa88d add project desc 2024-02-29 22:29:09 +01:00
6ac75b12af fix doc 2024-02-29 22:27:04 +01:00
034326a21e fix include path 2024-02-29 22:25:39 +01:00
8c1c3d4f9e add more doc 2024-02-29 22:24:42 +01:00
9028b553c3 add doxygen config 2024-02-29 22:23:30 +01:00
46adc200d1 add doxygen-awesome-css 2024-02-29 22:23:17 +01:00
7c75728180 better assert 2024-02-29 21:48:27 +01:00
16 changed files with 2927 additions and 79 deletions

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "doc/doxygen-awesome-css"]
path = doc/doxygen-awesome-css
url = https://github.com/jothepro/doxygen-awesome-css

View File

@@ -2,7 +2,7 @@
# Cahier des charges
![imagecdc](PeiP2_MAM-INFO_projet_02.jpg)
![imagecdc](projet.jpg)
# Build ⚙️

2736
doxyfile Normal file

File diff suppressed because it is too large Load Diff

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -1,5 +1,10 @@
#pragma once
/**
* \file Gauss.h
* \brief Contient la définition de l'algorithme de Gauss
*/
class Matrix;
namespace Gauss {

52
include/IO.h Normal file
View File

@@ -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 <string>
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);

113
include/Matrix.h Normal file
View File

@@ -0,0 +1,113 @@
#pragma once
/**
* \file Matrix.h
* \brief Contient la définition d'une matrice
*/
#include <cmath>
#include <cstddef>
#include <string>
#include <vector>
/**
* \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<Element> 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<Element>&& 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 <typename T>
bool IsEqualZero(T var) {
return std::abs(var) < std::pow(10, -5);
}

View File

@@ -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é
*/

View File

@@ -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"
/**
@@ -80,6 +85,7 @@ class VectAffine {
/**
* \brief Retourne l'origine de l'espace affine
* \return Un vecteur colonne
*/
const Matrix& GetOrigin() const {
return m_Origin;

View File

Before

Width:  |  Height:  |  Size: 809 KiB

After

Width:  |  Height:  |  Size: 809 KiB

View File

@@ -1,19 +0,0 @@
#pragma once
#include <string>
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);

View File

@@ -17,8 +17,6 @@ Matrix::Matrix(std::size_t lignes, std::size_t colonnes, std::initializer_list<E
m_Data.resize(m_Raws * m_Columns);
}
Matrix::~Matrix() {}
Matrix Matrix::operator*(const Matrix& other) const {
if (m_Columns != other.m_Raws) {
std::cerr << "Mutiplication impossible car la dimensions des matrices est incompatible" << std::endl;
@@ -92,10 +90,6 @@ bool Matrix::operator==(const Matrix& other) const {
return true;
}
Matrix::Element& Matrix::operator[](std::size_t indice) {
return m_Data[indice];
}
Matrix::Element& Matrix::at(std::size_t ligne, std::size_t colonne) {
return m_Data[ligne * m_Columns + colonne];
}
@@ -113,7 +107,8 @@ std::size_t Matrix::GetColumnCount() const {
}
Matrix Matrix::SubMatrix(std::size_t origine_ligne, std::size_t origine_colonne, std::size_t ligne, std::size_t colonne) const {
assert(m_Raws >= ligne && m_Columns >= colonne);
assert(m_Raws >= origine_ligne + ligne && m_Columns >= origine_colonne + colonne);
Matrix result {ligne, colonne};
for (std::size_t i = 0; i < ligne; i++) {

View File

@@ -1,49 +0,0 @@
#pragma once
#include <cmath>
#include <cstddef>
#include <string>
#include <vector>
/**
* \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<Element> 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<Element>&& 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 <typename T>
bool IsEqualZero(T var) {
return std::abs(var) < std::pow(10, -5);
}

View File

@@ -2,6 +2,7 @@ add_rules("mode.debug", "mode.release")
set_languages("c++17")
set_warnings("all")
add_includedirs("include")
-- Solver Library
target("Pivot")
@@ -31,7 +32,6 @@ for _, file in ipairs(os.files("test/test_*.cpp")) do
set_kind("binary")
add_files("test/" .. name .. ".cpp")
set_rundir("$(projectdir)/matricies")
add_includedirs("src")
set_default(false)