Una matriz ortogonal es una matriz cuadrada con entradas reales cuyas columnas y filas son vectores unitarios ortogonales (es decir, vectores ortonormales).
Esto significa que M ^ TM = I, donde I es la matriz de identidad y ^ T significa la transposición de la matriz.
Tenga en cuenta que esto es ortogonal no "ortogonal especial", por lo que el determinante de M puede ser 1 o -1.
El objetivo de este desafío no es la precisión de la máquina, por lo que si M ^ TM = I dentro de 4 decimales estará bien.
La tarea es escribir código que tome un número entero positivo n > 1
y genere una matriz ortogonal aleatoria n por n . La matriz debe elegirse aleatoria y uniformemente de todas las matrices n por n ortogonales. En este contexto, "uniforme" se define en términos de la medida de Haar, que esencialmente requiere que la distribución no cambie si se multiplica por cualquier matriz ortogonal elegida libremente. Esto significa que los valores de la matriz serán valores de coma flotante en el rango de -1 a 1.
La entrada y la salida pueden ser de cualquier forma que le resulte conveniente.
Muestre un ejemplo explícito de su código en ejecución.
No puede usar ninguna función de biblioteca existente que cree matrices ortogonales. Esta regla es un poco sutil, así que explicaré más. Esta regla prohíbe el uso de cualquier función existente que tome alguna (o ninguna) entrada y genere una matriz de tamaño al menos n por n que se garantice que sea ortogonal. Como ejemplo extremo, si desea la matriz de identidad n por n, tendrá que crearla usted mismo.
Puede usar cualquier biblioteca generadora de números aleatorios estándar para elegir números aleatorios de su elección.
Su código debe completarse en unos segundos como máximo n < 50
.
diag
? Crea una matriz diagonal que es de hecho ortogonal pero no siempre ortonormal.
diag
deberían estar bien.