Bonjour,
Je voudrais simuler en C++ un vecteur de variables aléatoires normales. Pour cela la méthode conseillée est de générer un vecteur colonne de variables normales, que je noterais [epsilon] puis de le multiplier par la matrice de Cholesky qui est une matrice issue de la décomposition de cholesky de la matrice de variance covariance:
[var-covar]=[chol]*[chol]t
[var-covar]: est la matrice de variance-covariance
[chol]: est la matrice de cholesky
[chol]t: est la transposée de la matrice de cholesky
Le problème est que pour que cette décomposition soit juste, il faut que [var-covar] soit définie positive or ce n'est pas toujours mon cas.
Mon objectif est donc de trouver une méthode qui puisse forcer la matrice [var-covar] à devenir une matrice symétrique définie positive.
Pour cela j'ai pensé à diagonaliser [var-covar] puis à remplacer toutes les valeurs propres négatives par des 0 :
[var-covar] = [v]-1*[d]*[v]
ou [d] est une matrice diagonale dont les valeurs>0
ensuite je prends la racine des éléments de [d], donc diag[di]=di^(1/2).
Puis je dis que la matrice de cholesky est la suivante
chol = [v]-1*[d]^(1/2)*[v].
Je voudrais savoir si mon raisonnemment est correcte, car j'ai une doute sur la validité de ma méthode.
Merci d'avance !