#include #include #include #include #include "jacobi.hpp" #include "matrix.hpp" char* cmdname; void usage() { std::cerr << "Usage: " << cmdname << " eps n nofthreads" << std::endl; exit(1); } template bool next_arg(int& argc, char**& argv, T& val) { if (argc == 0) return false; std::istringstream arg(*argv++); --argc; return !!(arg >> val); } int main(int argc, char** argv) { double eps; unsigned int n; unsigned int nofthreads; cmdname = *argv++; --argc; if (!next_arg(argc, argv, eps) || eps <= 0) usage(); if (!next_arg(argc, argv, n) || n == 0) usage(); if (!next_arg(argc, argv, nofthreads) || nofthreads == 0) usage(); if (nofthreads > n) usage(); if (argc > 0) usage(); const double E_POWER_MINUS_PI = pow(M_E, -M_PI); Jacobi jacobi([=](double x, double y) -> double { if (y == 0) { return sin(M_PI * x); } else if (y == 1) { return sin(M_PI * x) * E_POWER_MINUS_PI; } else { return 0; } }, n, eps, nofthreads); std::cout << n+2 << std::endl << jacobi.get_result(); }