<?xml version="1.0"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  -->

<document url="linear.html">

  <properties>
    <title>The Commons Math User Guide - Linear Algebra</title>
  </properties>

  <body>
    <section name="3 Linear Algebra">
      <subsection name="3.1 Overview" href="overview">
        <p>
           Linear algebra support in commons-math provides operations on real matrices
           (both dense and sparse matrices are supported) and vectors. It features basic
           operations (addition, subtraction ...) and decomposition algorithms that can
           be used to solve linear systems either in exact sense and in least squares sense.
        </p>
      </subsection>
      <subsection name="3.2 Real matrices" href="real_matrices">
        <p>
          The <a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/RealMatrix.html">
          RealMatrix</a> interface represents a matrix with real numbers as
          entries.  The following basic matrix operations are supported:
          <ul>
          <li>Matrix addition, subtraction, multiplication</li>
          <li>Scalar addition and multiplication</li>
          <li>transpose</li>
          <li>Norm and Trace</li>
          <li>Operation on a vector</li>
          </ul>
        </p>
        <p>
         Example:
         <source>
// Create a real matrix with two rows and three columns, using a factory
// method that selects the implementation class for us.
double[][] matrixData = { {1d,2d,3d}, {2d,5d,3d}};
RealMatrix m = MatrixUtils.createRealMatrix(matrixData);

// One more with three rows, two columns, this time instantiating the
// RealMatrix implementation class directly.
double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}};
RealMatrix n = new Array2DRowRealMatrix(matrixData2);

// Note: The constructor copies  the input double[][] array in both cases.

// Now multiply m by n
RealMatrix p = m.multiply(n);
System.out.println(p.getRowDimension());    // 2
System.out.println(p.getColumnDimension()); // 2

// Invert p, using LU decomposition
RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();
         </source>
        </p>
        <p>
        The three main implementations of the interface are <a
        href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/Array2DRowRealMatrix.html">
        Array2DRowRealMatrix</a> and <a
        href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/BlockRealMatrix.html">
        BlockRealMatrix</a> for dense matrices (the second one being more suited to
        dimensions above 50 or 100) and <a
        href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/SparseRealMatrix.html">
        SparseRealMatrix</a> for sparse matrices.
        </p>
      </subsection>
      <subsection name="3.3 Real vectors" href="real_vectors">
        <p>
          The <a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/RealVector.html">
          RealVector</a> interface represents a vector with real numbers as
          entries.  The following basic matrix operations are supported:
          <ul>
          <li>Vector addition, subtraction</li>
          <li>Element by element multiplication, division</li>
          <li>Scalar addition, subtraction, multiplication, division and power</li>
          <li>Mapping of mathematical functions (cos, sin ...)</li>
          <li>Dot product, outer product</li>
          <li>Distance and norm according to norms L1, L2 and Linf</li>
          </ul>
        </p>
        <p>
          The <a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/RealVectorFormat.html">
          RealVectorFormat</a> class handles input/output of vectors in a customizable
          textual format.
        </p>
      </subsection>
      <subsection name="3.4 Solving linear systems" href="solve">
        <p>
          The <code>solve()</code> methods of the <a
          href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/DecompositionSolver.html">DecompositionSolver</a>
          interface support solving linear systems of equations of the form AX=B, either
          in linear sense or in least square sense. A <code>RealMatrix</code> instance is
          used to represent the coefficient matrix of the system. Solving the system is a
          two phases process: first the coefficient matrix is decomposed in some way and
          then a solver built from the decomposition solves the system. This allows to
          compute the decomposition and build the solver only once if several systems have
          to be solved with the same coefficient matrix.
        </p>
        <p>
          For example, to solve the linear system
          <pre>
           2x + 3y - 2z = 1
           -x + 7y + 6z = -2
           4x - 3y - 5z = 1
          </pre>
          Start by decomposing the coefficient matrix A (in this case using LU decomposition)
          and build a solver
          <source>
RealMatrix coefficients =
    new Array2DRowRealMatrix(new double[][] { { 2, 3, -2 }, { -1, 7, 6 }, { 4, -3, -5 } },
                       false);
DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();
          </source>
          Next create a <code>RealVector</code> array to represent the constant
          vector B and use <code>solve(RealVector)</code> to solve the system
          <source>
RealVector constants = new ArrayRealVector(new double[] { 1, -2, 1 }, false);
RealVector solution = solver.solve(constants);
          </source>
          The <code>solution</code> vector will contain values for x
          (<code>solution.getEntry(0)</code>), y (<code>solution.getEntry(1)</code>),
          and z (<code>solution.getEntry(2)</code>) that solve the system.
        </p>
        <p>
          Each type of decomposition has its specific semantics and constraints on
          the coefficient matrix as shown in the following table. For algorithms that
          solve AX=B in least squares sense the value returned for X is such that the
          residual AX-B has minimal norm. Least Square sense means a solver can be computed
          for an overdetermined system, (i.e. a system with more equations than unknowns,
          which corresponds to a tall A matrix with more rows than columns). If an exact
          solution exist (i.e. if for some X the residual AX-B is exactly 0), then this
          exact solution is also the solution in least square sense. This implies that
          algorithms suited for least squares problems can also be used to solve exact
          problems, but the reverse is not true. In any case, if the matrix is singular
          within the tolerance set at construction, an error will be triggered when
          the solve method will be called, both for algorithms that compute exact solutions
          and for algorithms that compute least square solutions.
        </p>
        <p>
          <table border="1" align="center">
          <tr BGCOLOR="#CCCCFF"><td colspan="3"><font size="+1">Decomposition algorithms</font></td></tr>
          <tr BGCOLOR="#EEEEFF"><font size="+1"><td>Name</td><td>coefficients matrix</td><td>problem type</td></font></tr>
          <tr><td><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/LUDecomposition.html">LU</a></td><td>square</td><td>exact solution only</td></tr>
          <tr><td><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/CholeskyDecomposition.html">Cholesky</a></td><td>symmetric positive definite</td><td>exact solution only</td></tr>
          <tr><td><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/QRDecomposition.html">QR</a></td><td>any</td><td>least squares solution</td></tr>
          <tr><td><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/EigenDecomposition.html">eigen decomposition</a></td><td>square</td><td>exact solution only</td></tr>
          <tr><td><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/linear/SingularValueDecomposition.html">SVD</a></td><td>any</td><td>least squares solution</td></tr>
          </table>
        </p>
        <p>
          It is possible to use a simple array of double instead of a <code>RealVector</code>.
          In this case, the solution will be provided also as an array of double.
        </p>
        <p>
          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 <code>solve(RealMatrix),</code>
          which returns a matrix with column vectors representing the solutions.
        </p>
      </subsection>
      <subsection name="3.5 Eigenvalues/eigenvectors and singular values/singular vectors" href="eigen">
        <p>
          Decomposition algorithms may be used for themselves and not only for linear system solving.
          This is of prime interest with eigen decomposition and singular value decomposition.
        </p>
        <p>
          The <code>getEigenvalue()</code>, <code>getEigenvalues()</code>, <code>getEigenVector()</code>,
          <code>getV()</code>, <code>getD()</code> and <code>getVT()</code> methods of the
          <code>EigenDecomposition</code> interface support solving eigenproblems of the form
          AX = lambda X where lambda is a real scalar.
        </p>
        <p>The <code>getSingularValues()</code>, <code>getU()</code>, <code>getS()</code> and
        <code>getV()</code> methods of the <code>SingularValueDecomposition</code> interface
        allow to solve singular values problems of the form AXi = lambda Yi where lambda is a
        real scalar, and where the Xi and Yi vectors form orthogonal bases of their respective
        vector spaces (which may have different dimensions).
        </p>
      </subsection>
      <subsection name="3.6 Non-real fields (complex, fractions ...)" href="field">
        <p>
          In addition to the real field, matrices and vectors using non-real <a
          href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/FieldElement.html">field elements</a> can be used.
          The fields already supported by the library are:
          <ul>
            <li><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/complex/Complex.html">Complex</a></li>
            <li><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/fraction/Fraction.html">Fraction</a></li>
            <li><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/fraction/BigFraction.html">BigFraction</a></li>
            <li><a href="../commons-math-docs/apidocs/org/apache/commons/math4/legacy/util/BigReal.html">BigReal</a></li>
          </ul>
        </p>
      </subsection>
    </section>
  </body>
</document>
