Es posible que la respuesta no lo satisfaga si está buscando una respuesta rápida para algún problema computacional inmediato. Si eres matemático o programador, ¡te hará feliz! ¿Estás listo?
Primero, he trabajado álgebra lineal computacional desde que comencé la escuela de posgrado a fines de la década de 1970, tanto en matrices densas como dispersas. He sido testigo de muchos cambios, pero algunas cosas siguen siendo las mismas. Entonces, con al menos algo de experiencia, puedo decir lo siguiente.
La respuesta corta es que no hay talla para todos. Depende En muchas cosas:
1) ¿hay alguna estructura para su escasez? ¿Es la situación que cualquier elemento de la matriz es cero con probabilidad independientemente de cualquier otro elemento? o hay estructura? ¿Cuál es la relación de cero a entradas distintas de cero?
- ¿Qué partes del álgebra lineal son relevantes para la informática?
- ¿Cuál es la diferencia entre una matriz sin procesar y una matriz SVD proyectada (con rango completo)?
- ¿Qué significa el rango de una matriz jacobiana en robótica?
- ¿Cuáles son los algoritmos comunes para calcular / estimar eficientemente la covarianza de la muestra?
- Cómo demostrar que para cualesquiera 2 matrices cuadradas A y B, det (AB) = det (A) det (B)
2) ¿Cuáles son tus limitaciones? ¿Memoria? Computaciones?
3) ¿Tiene inquietudes sobre el rango dinámico (número de condición)? En otras palabras, ¿tienen algún problema las longitudes de palabra finitas?
4) ¿Se conoce k a priori ? ¿O necesita encontrarlo a partir de los datos?
5) Suponiendo que k es desconocido, ¿hay una gran brecha entre el k-th yk + 1-th eigenvalue más pequeño?
Te daré una respuesta para un conjunto de supuestos. Hay muchas otras respuestas para otros supuestos. ¡Seguridad laboral para matemáticos y programadores en las próximas décadas !
De acuerdo, supongamos que comenzamos con una matriz R escasa de n por n, donde [math] R = A ^ TA [/ math], y que:
a) La matriz R es muy escasa y muy grande, por lo que la memoria y la computación son estresores.
b) La matriz R está potencialmente mal acondicionada
c) k es desconocido, y el k + 1-eigenvalue más pequeño de R puede estar cerca del k-th eigenvalue más pequeño de R.
d) Hay una estructura en la matriz R. Específicamente con la reorganización correcta de los índices, la matriz R está casi en bandas, con un ancho de banda l << n.
Luego procedemos de la siguiente manera.
Primero usamos el método inverso Cuthill McKee, vea el algoritmo Cuthill-McKee para crear una matriz casi con bandas. La cita anterior incluye referencias a bibliotecas C ++. Esto da como resultado la expresión [matemáticas] (*) R = P (B + S) P ^ T, P = \ \ permutation \ matrix, \ \ B = \ banded \ matrix \ \ S = \ \ very \ sparse \ residual \ matriz [/ matemáticas]
En segundo lugar , utilizamos las transformaciones de cabeza de familia para tridiagonalizar la matriz B en bandas que luego factorizamos en B = CC ‘donde C es bidiagonal. Entonces podemos encontrar los vectores propios de B a través de los vectores singulares de C. Ver la transformación del jefe de familia
Tercero , usamos la iteración del cociente de Rayleigh, la iteración del cociente de Rayleigh, usando los resultados de la parte 2 anterior como condiciones iniciales, para identificar rápidamente los k vectores propios más pequeños de B + S. Una alternativa es el algoritmo QR algoritmo QR.
Cuarto , reasignamos los índices usando (*)