caca
All checks were successful
Linux arm64 / Build (push) Successful in 41m33s

This commit is contained in:
2024-05-14 19:00:04 +02:00
parent a135df2e96
commit 8c004b64ed
13 changed files with 2512 additions and 26 deletions

109
test/test_plot.cpp Normal file
View File

@@ -0,0 +1,109 @@
#include <algorithm>
#include <chrono>
#include <cmath>
#include <execution>
#include <future>
#include <matplot/matplot.h>
#include "Gauss.h"
#include "Matrix.h"
#include "Solver.h"
static constexpr int EXECUTION_COUNT = 100;
static constexpr int MATRIX_MAX_SIZE = 300;
static unsigned int GetRandomInt() {
return rand() % MATRIX_MAX_SIZE + 1;
}
static Matrix GetRandomMatrix(std::size_t a_Raw, std::size_t a_Column) {
Matrix matrix {a_Raw, a_Column};
for (std::size_t i = 0; i < matrix.GetRawCount(); i++) {
for (std::size_t j = 0; j < matrix.GetColumnCount(); j++) {
matrix.at(i, j) = GetRandomInt();
}
}
return matrix;
}
std::vector<double> GaussJordan(const std::vector<double>& x) {
std::vector<double> y;
std::for_each(x.begin(), x.end(), [&y](double size) {
auto start = std::chrono::system_clock::now();
for (int j = 0; j < EXECUTION_COUNT; j++) {
Matrix mat = GetRandomMatrix(size, size);
Gauss::GaussJordan(mat, false, false);
}
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
std::cout << "S " << size << "\n";
y.push_back(elapsed_seconds.count() / static_cast<double>(EXECUTION_COUNT));
});
return y;
}
std::vector<double> GaussJordanReduite(const std::vector<double>& x) {
std::vector<double> y;
std::for_each(x.begin(), x.end(), [&y](double size) {
auto start = std::chrono::system_clock::now();
for (int j = 0; j < EXECUTION_COUNT; j++) {
Matrix mat = GetRandomMatrix(size, size);
Gauss::GaussJordan(mat, true, false);
}
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end - start;
std::cout << "R " << size << "\n";
y.push_back(elapsed_seconds.count() / static_cast<double>(EXECUTION_COUNT));
});
return y;
}
int main() {
srand(time(0));
int start = 1;
std::vector<double> x = matplot::linspace(start, MATRIX_MAX_SIZE, MATRIX_MAX_SIZE - start + 1);
//std::vector<double> x = {5000};
std::vector<double> y, y1, y2, y3;
// y2.resize(x.size());
{
auto result1 = std::async(std::launch::async, &GaussJordan, x);
auto result2 = std::async(std::launch::async, &GaussJordanReduite, x);
y = result1.get();
y1 = result2.get();
}
std::cout << "Fini !\n";
// std::transform(x.begin(), x.end(), y2.begin(), [](double x) { return 1.0 / (100.0 * 100.0) * 0.6 * x * x; });
matplot::title("Echelonnage de matrices");
matplot::xlabel("Taille des matrices");
matplot::ylabel("Temps d'exécution (s)");
matplot::hold(matplot::on);
matplot::plot(x, y);
matplot::plot(x, y1);
auto l = matplot::legend({"Echelonnage non réduit", "Echelonnage réduit", "Echelonnage non réduit normalisé", "Echelonnage réduit normalisé"});
l->location(matplot::legend::general_alignment::topleft);
matplot::show();
return 0;
}