Wydajna biblioteka Java Matrix - Efficient Java Matrix Library
| Pierwotni autorzy | Peter Abeles |
|---|---|
| Wersja stabilna | 0,40 / 4 listopada 2020 r .
|
| System operacyjny | Wieloplatformowy |
| Rodzaj | Biblioteka |
| Licencja | Apache_License |
| Stronie internetowej | ejml |
Efficient Java Matrix Library (EJML) to biblioteka algebry liniowej do manipulowania macierzami rzeczywistymi / złożonymi / gęstymi / rzadkimi. Jego cele projektowe to; 1) aby były maksymalnie wydajne pod względem obliczeniowym i pamięciowym zarówno dla małych, jak i dużych macierzy oraz 2) były dostępne zarówno dla nowicjuszy, jak i ekspertów. Cele te są osiągane poprzez dynamiczne wybieranie najlepszych algorytmów do użycia w czasie wykonywania, czysty interfejs API i wiele interfejsów. EJML jest darmowy, napisany w 100% w Javie i został wydany na licencji Apache v2.0.
EJML ma trzy różne sposoby interakcji z nim: 1) proceduralne, 2) prosta macierz i 3) równania. Styl proceduralny zapewnia wszystkie możliwości EJML i prawie całkowitą kontrolę nad tworzeniem macierzy, szybkością i określonymi algorytmami. Styl SimpleMatrix zapewnia uproszczony podzbiór podstawowych możliwości w łatwym w użyciu, zorientowanym obiektowo interfejsie API ze stylem przepływu, zainspirowanym przez JAMA . Styl Equations zapewnia symboliczny interfejs, podobny w duchu do Matlab i innych CAS, który zapewnia zwarty sposób pisania równań.
Możliwości
EJML zapewnia następujące możliwości dla gęstych macierzy.
- Operatory podstawowe (dodawanie, mnożenie, ...)
- Manipulacja matrycą (ekstrakcja, wstawianie, łączenie, ...)
- Solvery liniowe (liniowe, najmniejszych kwadratów, przyrostowe, ...)
- Rozkłady (LU, QR, Cholesky, SVD, wartość własna, ...)
- Funkcje macierzy (ranga, symetria, definitywność, ...)
- Macierze losowe (kowariancja, ortogonalne, symetryczne, ...)
- Różne formaty wewnętrzne (wiersz-główny, blok)
- Testów jednostkowych
Przykłady użycia
Styl równania
Obliczanie zysku Kalmana :
eq.process("K = P*H'*inv( H*P*H' + R )");
Styl proceduralny
Obliczanie zysku Kalmana:
mult(H,P,c);
multTransB(c,H,S);
addEquals(S,R);
if( !invert(S,S_inv) )
throw new RuntimeException("Invert failed");
multTransA(H,S_inv,d);
mult(P,d,K);
Styl SimpleMatrix
Przykład rozkładu według wartości osobliwej (SVD):
SimpleSVD s = matA.svd();
SimpleMatrix U = s.getU();
SimpleMatrix W = s.getW();
SimpleMatrix V = s.getV();
Przykład mnożenia macierzy:
SimpleMatrix result = matA.mult(matB);
DecompositionFactory
Użycie DecompositionFactory do obliczenia rozkładu wartości osobliwej z gęstą dwurzędową macierzą główną (DDRM):
SingularValueDecomposition_F64<DenseMatrix64F> svd =
DecompositionFactory_DDRM.svd(true, true, true);
if (!DecompositionFactory.decomposeSafe(svd, matA))
throw new DetectedException("Decomposition failed.");
DenseMatrix64F U = svd.getU(null, false);
DenseMatrix64F S = svd.getW(null);
DenseMatrix64F V = svd.getV(null, false);
Przykład mnożenia macierzy:
CommonOps_DDRM.mult(matA, matB, result);