The Commons Math User Guide - Linear Algebra

Currently, numerical linear algebra support in commons-math is limited to basic operations on real matrices and solving linear systems.

The RealMatrix interface represents a matrix with real numbers as entries. The following basic matrix operations are supported:

  • Matrix addition, subtraction, mutiplication
  • Scalar addition and multiplication
  • Inverse and transpose
  • Determinants and singularity testing
  • LU decomposition
  • Norm and Trace
  • Operation on a vector

Example: // Create a real matrix with two rows and three columns double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}}; RealMatrix m = new RealMatrixImpl(matrixData); // One more with three rows, two columns double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}}; RealMatrix n = new RealMatrixImpl(matrixData2); // Note: The constructor copies the input double[][] array. // Now multiply m by n RealMatrix p = m.multiply(n); System.out.println(p.getRowDimension()); // 2 System.out.println(p.getRowDimension()); // 2 // Invert p RealMatrix pInverse = p.inverse();

The solve() methods of the RealMatrix interface support solving linear systems of equations. In each case, the RealMatrix represents the coefficient matrix of the system. For example, to solve the linear system

           2x + 3y - 2z = 1
           -x + 7y + 6x = -2
           4x - 3y - 5z = 1
          
Start by creating a RealMatrix to store the coefficients double[][] coefficientsData = {{2, 3, -2}, {-1, 7, 6}, {4, -3, -5}}; RealMatrix coefficients = new RealMatrixImpl(coefficientsData); Next create a double[] array to represent the constant vector and use solve(double[]) to solve the system double[] constants = {1, -2, 1}; double[] solution = coefficients.solve(constants); The solution array will contain values for x (solution[0]), y (solution[1]), and z (solution[2]) that solve the system.

If the coefficient matrix is not square or singular, an InvalidMatrixException is thrown.

It is possible to solve multiple systems with the same coefficient matrix in one method call. To do this, create a matrix whose column vectors correspond to the constant vectors for the systems to be solved and use solve(RealMatrix), which returns a matrix with column vectors representing the solutions.