| <?xml version="1.0"?> |
| |
| <!-- |
| Copyright 2003-2004 The Apache Software Foundation |
| |
| Licensed 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. |
| --> |
| |
| <?xml-stylesheet type="text/xsl" href="./xdoc.xsl"?> |
| <!-- $Revision$ $Date$ --> |
| <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> |
| Currently, numerical linear algebra support in commons-math is |
| limited to basic operations on real matrices and solving linear systems. |
| </p> |
| </subsection> |
| <subsection name="3.2 Real matrices" href="real_matrices"> |
| <p> |
| The <a href="../apidocs/org/apache/commons/math/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, mutiplication</li> |
| <li>Scalar addition and multiplication</li> |
| <li>Inverse and transpose</li> |
| <li>Determinants and singularity testing</li> |
| <li>LU decomposition</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 |
| 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 RealMatixImpl(matrixData2); |
| |
| // Note: constructor makes a |
| // Fresh copy of 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(); |
| </source> |
| </p> |
| </subsection> |
| <subsection name="3.3 Solving linear systems" href="solve"> |
| <p> |
| The <code>solve()</code> methods of the <code>RealMatrix</code> interface |
| support solving linear systems of equations. In each case, the |
| <code>RealMatrix</code> represents the coefficient matrix of the system. |
| For example, to solve the linear system |
| <pre> |
| 2x + 3y - 2z = 1 |
| -x + 7y + 6x = -2 |
| 4x - 3y - 5z = 1 |
| </pre> |
| Start by creating a RealMatrix to store the coefficients |
| <source> |
| double[][] coefficientsData = {{2, 3, -2}, {-1, 7, 6}, {4, -3, -5}}; |
| RealMatrix coefficients = new RealMatrixImpl(coefficientsData); |
| </source> |
| Next create a <code>double[]</code> array to represent the constant |
| vector and use <code>solve(double[])</code> to solve the system |
| <source> |
| double[] constants = {1, -2, 1}; |
| double[] solution = coefficients.solve(constants); |
| </source> |
| The <code>solution</code> array will contain values for x |
| (<code>solution[0]</code>), y (<code>solution[1]</code>), |
| and z (<code>solution[2]</code>) that solve the system. |
| </p> |
| <p> |
| If the coefficient matrix is not square or singular, an |
| <a href="../apidocs/org/apache/commons/math/linear/InvalidMatrixException.html"> |
| InvalidMatrixException</a> is thrown. |
| </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> |
| </section> |
| </body> |
| </document> |