You need to find the values of x, y, and z that satisfy the system of linear equations shown in Figure 8-2.
Use the RealMatrix and RealMatrixImpl
from Commons Math. Represent this system of linear equations as matrices
in the Ax=B form, as shown in Figure 8-3. Place the coefficients of
A in a RealMatrix, and put B in a double[]. Call the solve( ) method on RealMatrix
to retrieve a double[] of values for
x, y, and z that satisfy this system of equations.
The following example takes the coefficients and constants from Figure
8-3 and uses a RealMatrix to
solve this system:
import org.apache.commons.math.linear.RealMatrix;
import org.apache.commons.math.linear.RealMatrixImpl;
import org.apache.commons.lang.ArrayUtils;
double[][] coefficients = { { 3.0, 20.0, 89.0 },
{ 4.0, 40.0, 298.0 },
{ 7.0, 21.0, 0.42 } };
double[] values = { 1324, 2999, 2039 };
RealMatrix matrix = new RealMatrixImpl( );
matrix.setData( coefficients );
double[] answers = matrix.solve( values );
System.out.println( "Answers: " + ArrayUtils.toString( answers ) );This example solves this system of equations and prints out the
values of x, y, and z using Commons Lang ArrayUtils to print a double[]:
Answers: {400.4839095455532,-36.59139305646149,9.599731825759218}Using Commons Math, we find that the following values satisfy this system of equations: x = 400, y = -36, and z = 9.6.
To solve these equations, a double[][] of coefficients is created to
represent a 3 3 matrix, and a double[] of constants is created. The RealMatrix interface is implemented by
RealMatrixImpl, which stores a matrix
as a double[][]; to populate this
double[][], pass the double[][], coefficients, to the setData( ) method of RealMatrixImpl. To solve the system, the
values double[] is passed to matrix.solve( ), and a double[] containing x, y, and z is
returned.
This method will not work for every matrix; there are systems of
linear equations that are unsolvable. For example, if one attempts to
find values for the system of equations from Figure 8-4, an InvalidMatrixException will be thrown stating
that the matrix is singular. Additionally, if the number of rows in
B does not equal the number of
columns in A, solve() will throw an InvalidMatrixException.
For more information about solving systems of linear equations
(or, for that matter, information about anything), see Wikipedia (http://en.wikipedia.org/wiki/System_of_linear_equations).
RealMatixImpl uses a process known as
LU decomposition to solve this system of equations. For more information
about LU decomposition, see the JavaDoc for the org.apache.commons.math.linear package (http://commons.apache.org/math/apidocs/index.html).
