6using Matrix = std::vector<std::vector<double>>;
9 <<
"Usage: " << prog <<
" [distribution=gaussian] [optional seed] < matrix.txt\n"
10 <<
" - The input matrix is read from standard input with the format:\n"
12 <<
" r11 r12 ... r1n\n"
14 <<
" rn1 rn2 ... rnn\n"
15 <<
" - Supported distributions: gaussian | normal\n"
17 <<
" " << prog <<
" gaussian 12345 < my_corr.txt\n";
22 if (!(std::cin >> n) || n <= 0) {
23 throw std::runtime_error(
"Failed to read matrix size n.");
25 Matrix A(
static_cast<size_t>(n), std::vector<double>(
static_cast<size_t>(n)));
26 for (
int i = 0; i < n; ++i) {
27 for (
int j = 0; j < n; ++j) {
28 if (!(std::cin >> A[i][j])) {
29 throw std::runtime_error(
"Matrix lecture has failed.");
37 std::cout << std::fixed << std::setprecision(15);
38 for (
size_t i = 0; i < v.size(); ++i) {
39 if (i) std::cout <<
" ";
45int main(
int argc,
char** argv) {
47 std::string distName =
"gaussian";
48 unsigned int seed = std::random_device{}();
51 std::string arg1 = argv[1];
52 if (arg1 ==
"-h" || arg1 ==
"--help") {
60 seed =
static_cast<unsigned int>(std::stoul(argv[2]));
62 std::cerr <<
"Avertissement: seed invalide, utilisation d'un seed aleatoire.\n";
63 seed = std::random_device{}();
73 std::vector<std::unique_ptr<IMarginalDistribution>> truc{};
75 truc.emplace_back(std::move(dist));
82 }
catch (
const std::exception& ex) {
83 std::cerr <<
"Erreur: " << ex.what() <<
"\n";
Factory utilities for constructing copula objects from typed configurations.
@ GAUSSIAN
Gaussian copula, defined by a correlation matrix.
Joint probability distribution built from marginals and a copula.
Factory for instantiating concrete marginal distributions.
@ GAUSSIAN
Symmetric Gaussian marginal.
static std::unique_ptr< ICopula > create(CopulaType name, CopulaConfig config, unsigned int seed=std::random_device{}())
Creates a concrete copula instance.
std::vector< std::vector< double > > sample(std::size_t n) const
Draws multiple samples from the joint distribution.
static std::unique_ptr< IMarginalDistribution > create(MarginalType name, MarginalConfig cfg, unsigned int seed=std::random_device{}())
Creates a concrete marginal-distribution object.
void printUsage(const char *prog)
void printVector(const Vector &v)
Matrix readMatrixFromStdin()
Configuration object for a Gaussian copula.
Configuration object for GaussianMarginal.