Une matrice orthogonale est une matrice carrée avec des entrées réelles dont les colonnes et les lignes sont des vecteurs unitaires orthogonaux (c.-à-d. Des vecteurs orthonormaux).
Cela signifie que M ^ TM = I, où I est la matrice d'identité et ^ T signifie la transposition matricielle.
Notez que ce n'est pas orthogonal "spécial orthogonal", donc le déterminant de M peut être 1 ou -1.
Le but de ce défi n'est pas la précision de la machine, donc si M ^ TM = I à 4 décimales près, ça ira.
La tâche consiste à écrire du code qui prend un entier positif n > 1
et génère une matrice orthogonale aléatoire n par n . La matrice doit être choisie de manière aléatoire et uniforme parmi toutes les matrices orthogonales n par n. Dans ce contexte, "uniforme" est défini en termes de la mesure de Haar, qui exige essentiellement que la distribution ne change pas si elle est multipliée par une matrice orthogonale librement choisie. Cela signifie que les valeurs de la matrice seront des valeurs à virgule flottante comprises entre -1 et 1.
L'entrée et la sortie peuvent prendre n'importe quelle forme que vous jugez pratique.
Veuillez montrer un exemple explicite de l'exécution de votre code.
Vous ne pouvez utiliser aucune fonction de bibliothèque existante qui crée des matrices orthogonales. Cette règle est un peu subtile donc je vais vous expliquer plus. Cette règle interdit l'utilisation de toute fonction existante qui accepte certaines entrées (ou aucune) et génère une matrice de taille au moins n par n qui est garantie d'être orthogonale. À titre d'exemple extrême, si vous voulez la matrice d'identité n par n, vous devrez la créer vous-même.
Vous pouvez utiliser n'importe quelle bibliothèque de générateur de nombres aléatoires standard pour choisir des nombres aléatoires de votre choix.
Votre code devrait se terminer en quelques secondes au maximum n < 50
.
diag
? Il crée une matrice diagonale qui est en effet orthogonale mais pas toujours orthonormale.
diag
devrait aller.