Efficient Java Matrix Library (EJML) es una biblioteca de álgebra lineal para manipular matrices reales, complejas, densas y dispersas. Sus objetivos de diseño son: 1) ser lo más eficiente posible en términos de computación y memoria para matrices de cualquier tamaño, y 2) ser accesible tanto para principiantes como para expertos. Estos objetivos se logran mediante la selección dinámica de los mejores algoritmos en tiempo de ejecución, una API limpia y múltiples interfaces. EJML es gratuita, está escrita completamente en Java y se distribuye bajo la licencia Apache v2.0.
EJML ofrece tres formas distintas de interactuar con él: 1) Procedimental, 2) SimpleMatrix y 3) Ecuaciones. El estilo procedimental proporciona todas las capacidades de EJML y un control casi completo sobre la creación de matrices, la velocidad y los algoritmos específicos. El estilo SimpleMatrix ofrece un subconjunto simplificado de las capacidades principales en una API orientada a objetos, fácil de usar y con un estilo de flujo, inspirada en JAMA . El estilo Ecuaciones proporciona una interfaz simbólica, similar en espíritu a Matlab y otros sistemas de álgebra computacional (CAS), que ofrece una forma compacta de escribir ecuaciones. [ 1 ]
Capacidades
EJML proporciona las siguientes capacidades para matrices densas.
- Operadores básicos (suma, multiplicación, ...)
- Manipulación de matrices (extraer, insertar, combinar, ...)
- Solucionadores lineales (lineal, mínimos cuadrados, incremental, ...)
- Descomposiciones (LU, QR, Cholesky, SVD, Autovalor, ...)
- Características de la matriz (rango, simetría, definitividad, ... )
- Matrices aleatorias (covarianza, ortogonales, simétricas, ... )
- Diferentes formatos internos (por filas, por bloques)
- Pruebas unitarias
Ejemplos de uso
Estilo de ecuación
Cálculo de la ganancia de Kalman :
eq.process ( "K = P*H'*inv(H*P*H' + R) " ) ;Estilo procedimental
Cálculo de la ganancia de Kalman:
mult ( H , P , c ); multTransB ( c , H , S ); addEquals ( S , R ); if ( ! invert ( S , S_inv )) throw new RuntimeException ( "Error al invertir" ); multTransA ( H , S_inv , d ); mult ( P , d , K );Estilo SimpleMatrix
Ejemplo de descomposición en valores singulares (SVD):
SimpleSVD s = matA . svd (); SimpleMatrix U = s . getU (); SimpleMatrix W = s . getW (); SimpleMatrix V = s . getV ();Ejemplo de multiplicación de matrices:
Resultado de SimpleMatrix = matA . mult ( matB );Fábrica de descomposición
Uso de una DecompositionFactory para calcular una descomposición en valores singulares con una matriz densa de doble fila principal (DDRM): [ 2 ]
SingularValueDecomposition_F64 < DenseMatrix64F > svd = DecompositionFactory_DDRM . svd ( true , true , true );if ( ! DecompositionFactory . decomposeSafe ( svd , matA )) throw new DetectedException ( "Error en la descomposición." );DenseMatrix64F U = svd . getU ( nulo , falso ); DenseMatrix64F S = svd . obtenerW ( nulo ); DenseMatrix64F V = svd . getV ( nulo , falso );Ejemplo de multiplicación de matrices:
CommonOps_DDRM . mult ( matA , matB , resultado );Véase también
Referencias
- ↑ "Página del proyecto EJML" . EJML . Peter Abeles . Consultado el 21 de enero de 2019 .
- ↑ "Descomposiciones de matrices: biblioteca eficiente de matrices en Java" . ejml.org . Consultado el 24 de abril de 2021 .
Enlaces externos
- Sitio web oficial
- Bibliotecas numéricas
- Software que utiliza la licencia Apache.