I am happy to anounce that la4j-0.4.5 has just been released!
I feel so proud about this release. We did a fantastic job together: 7 developers pushed 292 commits to master branch and much more:
- 35 issues has been closed
- 30 pull request has been merged
- +262 new tests: 581 in totall
- +6k LOC: 22k in totall
All the major functional and performance issues has been fixed. The la4j did a great progress according to the previous versions. We did our best and hope you will enjoy new version!
References
http://la4j.org/ - project web page
https://github.com/vkostyukov/la4j - GitHub page
https://github.com/vkostyukov/la4j/releases/tag/v0.4.5 - GitHub's release page
Changelog
- New vector methods: `innerProduct()`, `outerProduct()` (contributed by Daniel Renshaw)
- Bug fix in `Vector.subtract()` method (contributed by Ewald Grusk)
- Bug fix in `Matrix.subtract()` method (contributed by Ewald Grusk)
- New matrix method `rotate()` (contributed by Jakob Moellers)
- New matrix method `shuffle()` (contributed by Jakob Moellers)
- Bug fix in `Vector.density()` and `Matrix.density()` (contributed by Ewald Grusk)
- Bug fix in `Matrix.determinant()` method (contributed by Yuriy Drozd)
- Minor improvement of `SymmetricMatrixPredicate` (contributed by Ewald Grusk)
- Bug fix in `EigenDecompositor` (reported by Ewald Grusk)
- Bug fix in `CompressedVector.swap()` (reported by Ewald Grusk, contributed by Yuriy Drozd)
- Typo fix in `IdentityMattixSource` (reported by Ewald Grusk, contributed by Yuriy Drozd)
- Renamed `Matrix.product()` to `Matrix.diagonalProduct()` (contributed by Julia Kostyukova)
- New matrix methods: `sum()` and `product()` (contributed by Julia Kostyukova)
- New vector methods: `sum()` and `product()` (contributed by Julia Kostyukova)
- Renamed `Matrix.kronecker()` to `Matrix.kroneckerProduct()` (contributed by Julia Kostyukova)
- New matrix method `hadamardProduct()` (contributed by Julia Kostyukova)
- Bug fix in `EigenDecompositor` (contributed by Maxim Samoylov)
- Improved stability of `EigenDecompositor` (contributed by Maxim Samoylov)
- New vector method `eachNonZero` (contributed by Maxim Samoylov)
- New matrix method `power` (contributed by Jakob Moellers)
- New matrix methods `eachInRow`, `eachInColumn`(contributed by Maxim Samoylov)
- New matrix methods `eachNonZeroInRow`, `eachNonZeroInColumn`, `eachNonZero` (contributed by Maxim Samoylov)
- New factory method `createBlockMatrix` (contributed by Maxim Samoylov)
- New fast and stable algorithm for determinant calculation (contributed by Maxim Samoylov)
- Improved stability of accumulators (contributed by Maxim Samoylov)
- Bug fix in `Matrix.rank()` method (contributed by Ewald Grusk)
- Bug fix in `SingularValueDecompositor` class (reported by Jonathan Edwards)
- Fixed a typo in `MatrixInvertor` -> `MatrixInverter`
- New function `Mod` (requested by Luc Trudeau)
- Bug fix in `GaussianSolver`
- Bug fix in `SquareRootSolver`
- Bug fix in `JacobiSolver`
- New matrix and vector methods `max()`, `min()`, `minInRow()`, `maxInColumn()` (contributed by Maxim Samoylov)
- New linear solver: `ForwardBackSubstitutionSolver` (for square systems)
- New linear solver: `LeastSquaresSolver` (least squares solver)
- New all-things-in-one class `LinearAlgebra`
- New matrix/vector method: `non()`, which is actually `!is()` delegate
- New matrix to vector converters: `toRowVector()`, `toColumnVector()`
- New vector to matrix converters: `toRowMatrix()`, `toColumnMatrix()`
- New API for solving system of linear equations: `withSolver(SolverFactory)`
- New API for decomposing: `withDecompositor(DecompositorFactory)`
- New API for inverting: `withInverter(InverterFactory)`
API examples
Matrix inversion
Matrix inversion
// We want simple dense matrix that uses 2D array as internal representation Matrix a = new Basic2DMatrix(new double[][] { { 1.0, 2.0, 3.0 }, { 4.0, 5.0, 6.0 }, { 7.0, 8.0. 9.0 } }); // We will use Gauss-Jordan method for inverting MatrixInverter inverter = a.withInverter(LinearAlgebra.GAUSS_JORDAN); // The 'b' matrix will be dense Matrix b = inverter.invert(LinearAlgebra.DENSE_FACTORY);System of linear equations
// The coefficient matrix 'a' is a CRS (Compressed Sparse Row) matrix Matrix a = new CRSMatrix(new double[][] { { 1.0, 2.0, 3.0 }, { 4.0, 5.0, 6.0 }, { 7.0, 8.0. 9.0 } }); // A right hand side vector, which is simple dense vector Vector b = new BasicVector(new double[] { 1.0, 2.0, 3.0 }); // We will use standard Forward-Back Substitution method, // which is based on LU decomposition and can be used with square systems LinearSystemSolver solver = a.withSolver(LinearAlgebra.FORWARD_BACK_SUBSTITUTION); // The 'x' vector will be sparse Vector x = solver.solve(b, LinearAlgebra.SPARSE_FACTORY);Matrix decomposition
// We want simple dense matrix, which is based on 1D double's array Matrix a = new Basic1DMatrix(new double[][] { { 1.0, 2.0, 3.0 }, { 4.0, 5.0, 6.0 }, { 7.0, 8.0. 9.0 } }); // We will use LU decompositor MatrixDecompositor decompositor = a.withDecompositor(LinearAlgebra.LU); // The result should be treated as: L = lup[0], U = lup[1], P = lup[2] Matrix[] lup = decompositor.decompose(LinearAlgebra.DENSE_FACTORY);
Is it possible to provide functions like eigs() and svds() in matlab, such that users can
ReplyDeleteretrieve the $k$ largest singular values/singular vectors and $k$ eigenvalues/eigenvectors?