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?