Compare commits
9 Commits
54346dc77f
...
222d723675
| Author | SHA1 | Date | |
|---|---|---|---|
| 222d723675 | |||
| e072d30995 | |||
| bbcf3aa88d | |||
| 6ac75b12af | |||
| 034326a21e | |||
| 8c1c3d4f9e | |||
| 9028b553c3 | |||
| 46adc200d1 | |||
| 7c75728180 |
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "doc/doxygen-awesome-css"]
|
||||||
|
path = doc/doxygen-awesome-css
|
||||||
|
url = https://github.com/jothepro/doxygen-awesome-css
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
|
|
||||||
# Cahier des charges
|
# Cahier des charges
|
||||||

|

|
||||||
|
|
||||||
# Build ⚙️
|
# Build ⚙️
|
||||||
|
|
||||||
|
|||||||
1
doc/doxygen-awesome-css
Submodule
1
doc/doxygen-awesome-css
Submodule
Submodule doc/doxygen-awesome-css added at c01e51e461
@@ -1,5 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file Gauss.h
|
||||||
|
* \brief Contient la définition de l'algorithme de Gauss
|
||||||
|
*/
|
||||||
|
|
||||||
class Matrix;
|
class Matrix;
|
||||||
|
|
||||||
namespace Gauss {
|
namespace Gauss {
|
||||||
52
include/IO.h
Normal file
52
include/IO.h
Normal 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
113
include/Matrix.h
Normal 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);
|
||||||
|
}
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file Solver.h
|
||||||
|
* \brief Contient la définition du solutionneur
|
||||||
|
*/
|
||||||
|
|
||||||
#include "Vect.h"
|
#include "Vect.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +37,7 @@ class Solver {
|
|||||||
Vect Kernel() const;
|
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]
|
* La matrice d'entrée est considéré comme étant la matrice augmenté [A|B]
|
||||||
* \return L'espace affine associé
|
* \return L'espace affine associé
|
||||||
*/
|
*/
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file Vect.h
|
||||||
|
* \brief Contient la définition d'un espace affine et d'un espace vectoriel
|
||||||
|
*/
|
||||||
|
|
||||||
#include "Matrix.h"
|
#include "Matrix.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +31,7 @@ class Vect {
|
|||||||
Matrix GetVector(std::size_t index) const;
|
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;
|
std::size_t GetDimension() const;
|
||||||
|
|
||||||
@@ -80,6 +85,7 @@ class VectAffine {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Retourne l'origine de l'espace affine
|
* \brief Retourne l'origine de l'espace affine
|
||||||
|
* \return Un vecteur colonne
|
||||||
*/
|
*/
|
||||||
const Matrix& GetOrigin() const {
|
const Matrix& GetOrigin() const {
|
||||||
return m_Origin;
|
return m_Origin;
|
||||||
|
Before Width: | Height: | Size: 809 KiB After Width: | Height: | Size: 809 KiB |
19
src/IO.h
19
src/IO.h
@@ -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);
|
|
||||||
@@ -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);
|
m_Data.resize(m_Raws * m_Columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
Matrix::~Matrix() {}
|
|
||||||
|
|
||||||
Matrix Matrix::operator*(const Matrix& other) const {
|
Matrix Matrix::operator*(const Matrix& other) const {
|
||||||
if (m_Columns != other.m_Raws) {
|
if (m_Columns != other.m_Raws) {
|
||||||
std::cerr << "Mutiplication impossible car la dimensions des matrices est incompatible" << std::endl;
|
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;
|
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) {
|
Matrix::Element& Matrix::at(std::size_t ligne, std::size_t colonne) {
|
||||||
return m_Data[ligne * m_Columns + 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 {
|
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};
|
Matrix result {ligne, colonne};
|
||||||
|
|
||||||
for (std::size_t i = 0; i < ligne; i++) {
|
for (std::size_t i = 0; i < ligne; i++) {
|
||||||
|
|||||||
49
src/Matrix.h
49
src/Matrix.h
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -2,6 +2,7 @@ add_rules("mode.debug", "mode.release")
|
|||||||
|
|
||||||
set_languages("c++17")
|
set_languages("c++17")
|
||||||
set_warnings("all")
|
set_warnings("all")
|
||||||
|
add_includedirs("include")
|
||||||
|
|
||||||
-- Solver Library
|
-- Solver Library
|
||||||
target("Pivot")
|
target("Pivot")
|
||||||
@@ -31,7 +32,6 @@ for _, file in ipairs(os.files("test/test_*.cpp")) do
|
|||||||
set_kind("binary")
|
set_kind("binary")
|
||||||
add_files("test/" .. name .. ".cpp")
|
add_files("test/" .. name .. ".cpp")
|
||||||
set_rundir("$(projectdir)/matricies")
|
set_rundir("$(projectdir)/matricies")
|
||||||
add_includedirs("src")
|
|
||||||
|
|
||||||
set_default(false)
|
set_default(false)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user