Articulo de referencia

Kit de herramientas Matrix para Java

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...

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

  1. "Página del proyecto MTJ" . MTJ . Consultado el 30 de noviembre de 2012 .
  2. 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) .
  3. "Java Matrix Benchmark" . Consultado el 6 de diciembre de 2012 .
  • matrix-toolkits-java en GitHub