Ya encontré alguna forma de producir dichas matrices a partir de SO(n) con un método llamado algoritmo de subgrupos, pero me gustaría que me aconsejaran sobre el método que utilicé. En ningún sitio he podido encontrar ningún documento relacionado con SO(n) directamente sino con O(n).
Para simplificarlo, genero un $(k-1) \times (k-1)$ matriz de rotación $\Gamma_{k-1}$ crear la matriz
$\left( \begin{array}{ccc} 1 & \cdots & 0 \\\ \vdots & \Gamma_{n-1} & \\\ 0 & & \end{array} \right)$
entonces encuentro una rotación $R$ que transforma la primera columna en un vector $v$ generado aleatoriamente como un punto de la unidad $k$ -esfera. A continuación, genere una nueva $k \times k$ matriz de rotación $\Gamma_k$ :
$\Gamma_{k} = R\left( \begin{array}{ccc} 1 & \cdots & 0 \\\ \vdots & \Gamma_{k-1} & \\\ 0 & & \end{array} \right)$
La inducción está haciendo todo el trabajo. En la práctica, o bien se empieza por un $1 \times 1$ con un solo elemento igual a 1, o se crea una primera matriz trivial $2 \times 2$ matriz de rotación con un ángulo tomado uniformemente de $[0,2\pi)$ que parece más directo. Me he saltado los detalles de cómo generar la matriz $R$ y el vector $v$ ya que al principio parecía inútil. En resumen $v$ es la normalización de un vector $v'$ qué elementos $v'_i \sim N(0,1)$ y $R$ se obtiene mediante una doble reflexión de Householder.
En la práctica esto parece una encarnación correcta del algoritmo de los subgrupos cuando el grupo es SO(n) pero quería comprobar con personas más inclinadas a las matemáticas que yo si no existía una forma más eficiente. Como he dicho, he encontrado algunos artículos que explican variaciones o mejoras del método original de Stewart $-$ que el algoritmo de subgrupos es una generalización $-$ en papeles de Anderson o Genz. Todos ellos se centraban en matrices ortogonales y me hubiera gustado transponer estas mejoras a matrices ortogonales especiales.
Ver:
- "La generación eficiente de matrices ortogonales aleatorias con una aplicación a los estimadores de condiciones" Stewart
- "Generación de matrices ortogonales aleatorias" Anderson
- "Métodos para generar matrices ortogonales aleatorias" Genz
- "El algoritmo de subgrupos para generar variables aleatorias uniformes" Diaconis
EDIT: por cierto, podría utilizar este algoritmo con n tan grande como 1000 y más
Así que la verdadera pregunta es (y no estoy muy seguro de cómo formularlo correctamente ya que tengo una grave falta de conocimiento en esa área), ¿existe un mapeo de O(n) a SO(n) que preserve la uniformidad?