Tuesday, October 1, 2013

The la4j-0.4.5 has been released!

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:


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
// 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);

1 comment:

  1. Is it possible to provide functions like eigs() and svds() in matlab, such that users can
    retrieve the $k$ largest singular values/singular vectors and $k$ eigenvalues/eigenvectors?

    ReplyDelete