¿Cuál es la forma más eficiente de calcular solo el valor propio más grande de la matriz de covarianza de un dato de tamaño pequeño (máx. 10 × 10)?

Después de buscar en Google la matriz de covarianza (no hago estadísticas), encontré que es simétrica positiva semidefinida. El método más rápido a su disposición son las iteraciones RQI, que han demostrado una tasa de convergencia cúbica en este caso.

Iteración del cociente de Rayleigh

Es un método muy hermoso. Me temo que no sé qué paquetes de software está utilizando, así que no sé qué funciones puede usar para aplicar este método. Sin embargo, no es difícil de implementar.

Debo agregar: Digo “más rápido”, pero las iteraciones de arnoldi / lanczos pueden superarlo en algunos casos (esto es lo que usará su solucionador de valor propio disperso estándar). Depende de cómo estés usando cada método. Sin embargo, RQI puede ser extremadamente rápido en matrices SPSD.

Editar: Estaba mirando esto nuevamente y me di cuenta de que este podría no ser un enfoque óptimo si necesita hacer esto para muchas matrices pequeñas como en su caso específico, debido a la inversión requerida. Podría intentar aproximar el inverso usando algunas iteraciones de gradiente conjugado en este paso para mantener el paso de inversión a un costo de [matemáticas] O (N ^ 2) [/ matemáticas], pero sospecho que el método resultante sería un forma de método de Lanczos de cambio / inversión precondicionado polinomial. De cualquier manera, usted gana contra los solucionadores de valores propios densos estándar (por ejemplo, el “eig” de MATLAB) ya que no pueden apuntar a una porción específica del espectro, y deben resolver todos los valores propios antes de poder estar seguros de tener el más grande.

En otras palabras, si entiendo correctamente, desea calcular el valor singular más grande de una matriz. Puede hacer esto en MATLAB con el comando svd (A, 1). Sin embargo, dado que las matrices 10 × 10 son tan pequeñas, no sé si esto sería una gran mejora.

¿Puedes explicar el cálculo de la “ventana deslizante” que estás haciendo? Es posible mejorar todo el algoritmo incluso si no puede hacer mucho por este componente.

Tanto en matlab como en python, el trabajo de comando eig (A, 1) (o svd (A, 1)) le proporciona el valor eigen superior y el vector.

Otra sugerencia que quizás ya hayas probado: desliza solo las matrices triangulares superiores o triangulares inferiores