Matrix Toolkit Java (MTJ) es una biblioteca de software Java de código abierto para realizar álgebra lineal numérica . La biblioteca contiene un conjunto completo de operaciones estándar de álgebra lineal para matrices densas basadas en código BLAS y LAPACK . El proyecto Templates proporciona un conjunto parcial de operaciones para matrices dispersas . La biblioteca se puede configurar para ejecutarse como una biblioteca Java pura o utilizar código BLAS optimizado para máquina a través de la interfaz nativa de Java .
MTJ fue desarrollado originalmente por Bjørn-Ove Heimsund, quien se ha retirado debido a otros compromisos. La página web del proyecto indica que "(Los nuevos responsables del mantenimiento) se ocupan principalmente de mantener la biblioteca y corregir los errores a medida que se descubren. No hay un plan de lanzamientos futuros". [ 1 ]
Se pueden encontrar varias citas de MTJ en la literatura científica, incluyendo [ 2 ] que utiliza su precondicionador LU. El rendimiento de MTJ se ha comparado con otras bibliotecas, que se pueden encontrar en el sitio de Java Matrix Benchmark. [ 3 ]
Capacidades
A continuación se ofrece una descripción general de las capacidades de MTJ, tal como aparecen en el sitio web del proyecto:
- Estructuras de datos para matrices dispersas densas y estructuradas en los siguientes formatos:
- Denso, columna principal.
- Matrices de banda, que almacenan solo unas pocas diagonales.
- Matrices compactas, que almacenan solo la mitad de las matrices (para matrices triangulares o simétricas).
- Matrices tridiagonales y tridiagonales simétricas.
- Soporte transparente para almacenamiento simétrico y triangular.
- Estructuras de datos para matrices dispersas no estructuradas en estos formatos:
- Almacenamiento comprimido por filas o columnas (CRS/CCS).
- Sistemas de coordenadas de referencia (CRS/CCS) flexibles, que utilizan vectores dispersos de tamaño variable.
- Almacenamiento diagonal comprimido (CDS).
- Las matrices dispersas densas y estructuradas se construyen sobre BLAS y LAPACK, e incluyen las siguientes operaciones intrínsecas:
- Multiplicación de matrices/vectores.
- Multiplicación de matrices.
- Las clasificaciones se actualizan mediante matrices o vectores.
- Solucionadores directos de matrices.
- Las matrices dispersas no estructuradas admiten las mismas operaciones que las estructuradas, con la excepción de que no disponen de solucionadores directos. Sin embargo, sus métodos de multiplicación matriz/vector están optimizados para su uso en solucionadores iterativos.
- Descomposiciones matriciales de matrices densas y dispersas estructuradas:
- LU y Cholesky.
- Descomposiciones en valores propios para matrices densas asimétricas.
- Descomposiciones en valores singulares para matrices densas asimétricas.
- Descomposiciones de valores propios para matrices simétricas (tridiagonales, de banda, compactas y densas).
- Descomposiciones matriciales ortogonales para matrices densas (QR, RQ, LQ y QL).
- Solucionadores iterativos para matrices dispersas no estructuradas del proyecto Templates:
- Gradientes biconjugados.
- Gradientes biconjugados estabilizados.
- Gradientes conjugados.
- Gradientes conjugados al cuadrado.
- Iteración de Chebyshev.
- Residuo mínimo generalizado (GMRES).
- Refinamiento iterativo (método de Richardson).
- Residuo casi mínimo.
- Una selección de precondicionadores algebraicos:
- Preacondicionamiento diagonal.
- Sobrerrelajación sucesiva simétrica.
- Cholesky incompleto.
- LU incompleto.
- Unidad de localización incompleta con relleno mediante umbralización.
- Multigrid algebraico mediante agregación suavizada.
Ejemplos de uso
Ejemplo de descomposición en valores singulares (SVD):
SVD svd = new SVD ( matA . numRows (), matA . numColumns ()); SVD s = svd . factor ( matA ); DenseMatrix U = s . getU (); DenseMatrix S = s . getS (); DenseMatrix Vt = s . getVt ();Ejemplo de multiplicación de matrices:
DenseMatrix resultado = new DenseMatrix ( matA . numRows (), matB . numColumns ()); matA . mult ( matB , resultado );Véase también
Referencias
- ↑ "Página del proyecto MTJ" . MTJ . Consultado el 30 de noviembre de 2012 .
- ↑ McMahan, HB; Gordon, GJ (2005). "Planificación exacta rápida en procesos de decisión de Markov" (PDF) . Actas de la 15.ª Conferencia Internacional sobre Planificación y Programación Automatizadas (ICAPS-05) .
- ↑ "Java Matrix Benchmark" . Consultado el 6 de diciembre de 2012 .
Enlaces externos
- matrix-toolkits-java en GitHub
- Software numérico