**JAMA : A Java Matrix Package**

**Background:**

JAMA is a basic linear algebra package for Java. It provides user-level classes for constructing and manipulating real, dense matrices. It is meant to provide sufficient functionality for routine problems, packaged in a way that is natural and understandable to non-experts. It is intended to serve as the standard matrix class for Java, and will be proposed as such to the Java Grande Forum and then to Sun. A straightforward public-domain reference implementation has been developed by the MathWorks and NIST as a strawman for such a class. We are releasing this version in order to obtain public comment. There is no guarantee that future versions of JAMA will be compatible with this one.

**Capabilities.**

JAMA is comprised of six Java classes: Matrix, CholeskyDecomposition, LUDecomposition, QRDecomposition, SingularValueDecomposition and EigenvalueDecomposition.

The Matrix class provides the fundamental operations of numerical linear algebra. Various constructors create Matrices from two dimensional arrays of double precision floating point numbers. Various gets and sets provide access to submatrices and matrix elements. The basic arithmetic operations include matrix addition and multiplication, matrix norms and selected element-by-element array operations. A convenient matrix print method is also included.

Five fundamental matrix decompositions, which consist of pairs or triples of matrices, permutation vectors, and the like, produce results in five decomposition classes. These decompositions are accessed by the Matrix class to compute solutions of simultaneous linear equations, determinants, inverses and other matrix functions. The five decompositions are

Cholesky Decomposition of symmetric, positive definite matrices

LU Decomposition (Gaussian elimination) of rectangular matrices

QR Decomposition of rectangular matrices

Eigenvalue Decomposition of both symmetric and nonsymmetric square matrices

Singular Value Decomposition of rectangular matrices

The current JAMA deals only with real matrices. We expect that future versions will also address complex matrices. This has been deferred since crucial design decisions cannot be made until certain issues regarding the implementation of complex in the Java language are resolved.

The design of JAMA represents a compromise between the need for pure and elegant object-oriented design and the need to enable high performance implementations.

**Example of Use.**The following simple example solves a 3×3 linear system Ax=b and computes the norm of the residual.

double[][] array = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};

Matrix A = new Matrix(array);

Matrix b = Matrix.random(3,1);

Matrix x = A.solve(b);

Matrix Residual = A.times(x).minus(b);

double rnorm = Residual.normInf();

**The Apache Commons Mathematics Library:**

Commons Math is a library of lightweight, self-contained mathematics and statistics components addressing the most common problems not available in the Java programming language or Commons Lang.

Guiding principles:

Real-world application use cases determine development priority.

This package emphasizes small, easily integrated components rather than large libraries with complex dependencies and configurations.

All algorithms are fully documented and follow generally accepted best practices.

In situations where multiple standard algorithms exist, a Strategy pattern is used to support multiple implementations.

courtesy:http://math.nist.gov/javanumerics/jama/ , http://commons.apache.org/proper/commons-math//index.html