#pragma once /** * @file Solvers.hpp * * @brief Implémentation de plusieurs algorihtmes de solveurs pour un système * d'équations linéaires * * Nom: * Code permanent : * Email : * */ #include "Math3D.h" namespace gti320 { // Identification des solveurs enum eSolverType { kNone, kGaussSeidel, kColorGaussSeidel, kCholesky }; // Paramètres de convergences pour les algorithmes itératifs static const float eps = 1e-4f; static const float tau = 1e-5f; /** * Résout Ax = b avec la méthode Gauss-Seidel */ static void gaussSeidel(const Matrix& A, const Vector& b, Vector& x, int k_max) { // TODO // // Implémenter la méthode de Gauss-Seidel } /** * Résout Ax = b avec la méthode Gauss-Seidel (coloration de graphe) */ static void gaussSeidelColor(const Matrix& A, const Vector& b, Vector& x, const Partitions& P, const int maxIter) { // TODO // // Implémenter la méthode de Gauss-Seidel avec coloration de graphe. // Les partitions avec l'index de chaque particule sont stockées dans la table des tables, P. } /** * Résout Ax = b avec la méthode de Cholesky */ static void cholesky(const Matrix& A, const Vector& b, Vector& x) { // TODO // // Calculer la matrice L de la factorisation de Cholesky // TODO // // Résoudre Ly = b // TODO // // Résoudre L^t x = y // // Remarque : ne pas caculer la transposer de L, c'est inutilement // coûteux. } }