Improved documentation of QR decomposition handling of singular matrix.
JIRA: MATH-1101 git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1570994 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
927361d787
commit
f299ecf330
|
@ -51,6 +51,9 @@ If the output is not quite correct, check for invisible trailing spaces!
|
||||||
</properties>
|
</properties>
|
||||||
<body>
|
<body>
|
||||||
<release version="3.3" date="TBD" description="TBD">
|
<release version="3.3" date="TBD" description="TBD">
|
||||||
|
<action dev="luc" type="add" issue="MATH-1101">
|
||||||
|
Improved documentation of QR decomposition handling of singular matrices.
|
||||||
|
</action>
|
||||||
<action dev="luc" type="add" issue="MATH-1053" due-to="Sean Owen">
|
<action dev="luc" type="add" issue="MATH-1053" due-to="Sean Owen">
|
||||||
QR decomposition can compute pseudo-inverses for tall matrices.
|
QR decomposition can compute pseudo-inverses for tall matrices.
|
||||||
</action>
|
</action>
|
||||||
|
|
|
@ -291,6 +291,14 @@ public class QRDecomposition {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a solver for finding the A × X = B solution in least square sense.
|
* Get a solver for finding the A × X = B solution in least square sense.
|
||||||
|
* <p>
|
||||||
|
* 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). In any case, if the matrix is singular
|
||||||
|
* within the tolerance set at {@link QRDecomposition#QRDecomposition(RealMatrix,
|
||||||
|
* double) construction}, an error will be triggered when
|
||||||
|
* the {@link DecompositionSolver#solve(RealVector) solve} method will be called.
|
||||||
|
* </p>
|
||||||
* @return a solver
|
* @return a solver
|
||||||
*/
|
*/
|
||||||
public DecompositionSolver getSolver() {
|
public DecompositionSolver getSolver() {
|
||||||
|
|
|
@ -184,6 +184,14 @@ public class RRQRDecomposition extends QRDecomposition {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a solver for finding the A × X = B solution in least square sense.
|
* Get a solver for finding the A × X = B solution in least square sense.
|
||||||
|
* <p>
|
||||||
|
* 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). In any case, if the matrix is singular
|
||||||
|
* within the tolerance set at {@link RRQRDecomposition#RRQRDecomposition(RealMatrix,
|
||||||
|
* double) construction}, an error will be triggered when
|
||||||
|
* the {@link DecompositionSolver#solve(RealVector) solve} method will be called.
|
||||||
|
* </p>
|
||||||
* @return a solver
|
* @return a solver
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -144,10 +144,16 @@ RealVector solution = solver.solve(constants);
|
||||||
Each type of decomposition has its specific semantics and constraints on
|
Each type of decomposition has its specific semantics and constraints on
|
||||||
the coefficient matrix as shown in the following table. For algorithms that
|
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
|
solve AX=B in least squares sense the value returned for X is such that the
|
||||||
residual AX-B has minimal norm. If an exact solution exist (i.e. if for some
|
residual AX-B has minimal norm. Least Square sense means a solver can be computed
|
||||||
X the residual AX-B is exactly 0), then this exact solution is also the solution
|
for an overdetermined system, (i.e. a system with more equations than unknowns,
|
||||||
in least square sense. This implies that algorithms suited for least squares
|
which corresponds to a tall A matrix with more rows than columns). If an exact
|
||||||
problems can also be used to solve exact problems, but the reverse is not true.
|
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>
|
||||||
<p>
|
<p>
|
||||||
<table border="1" align="center">
|
<table border="1" align="center">
|
||||||
|
|
|
@ -273,5 +273,14 @@ public class QRDecompositionTest {
|
||||||
});
|
});
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected=SingularMatrixException.class)
|
||||||
|
public void testQRSingular() {
|
||||||
|
final RealMatrix a = MatrixUtils.createRealMatrix(new double[][] {
|
||||||
|
{ 1, 6, 4 }, { 2, 4, -1 }, { -1, 2, 5 }
|
||||||
|
});
|
||||||
|
final RealVector b = new ArrayRealVector(new double[]{ 5, 6, 1 });
|
||||||
|
new QRDecomposition(a, 1.0e-15).getSolver().solve(b);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue