public class SolvePseudoInverseSvd_DDRM
extends java.lang.Object
implements org.ejml.interfaces.linsol.LinearSolverDense<org.ejml.data.DMatrixRMaj>
The pseudo-inverse is typically used to solve over determined system for which there is no unique solution.
x=inv(ATA)ATb
where A ∈ ℜ m × n and m ≥ n.
This class implements the Moore-Penrose pseudo-inverse using SVD and should never fail. Alternative implementations can use Cholesky decomposition, but those will fail if the ATA matrix is singular. However the Cholesky implementation is much faster.
Constructor and Description |
---|
SolvePseudoInverseSvd_DDRM()
Creates a solver targeted at matrices around 100x100
|
SolvePseudoInverseSvd_DDRM(int maxRows,
int maxCols)
Creates a new solver targeted at the specified matrix size.
|
Modifier and Type | Method and Description |
---|---|
org.ejml.interfaces.decomposition.SingularValueDecomposition<org.ejml.data.DMatrixRMaj> |
getDecomposer() |
org.ejml.interfaces.decomposition.SingularValueDecomposition<org.ejml.data.DMatrixRMaj> |
getDecomposition() |
void |
invert(org.ejml.data.DMatrixRMaj A_inv) |
boolean |
modifiesA() |
boolean |
modifiesB() |
double |
quality() |
boolean |
setA(org.ejml.data.DMatrixRMaj A) |
void |
setThreshold(double threshold)
Specify the relative threshold used to select singular values.
|
void |
solve(org.ejml.data.DMatrixRMaj b,
org.ejml.data.DMatrixRMaj x) |
public SolvePseudoInverseSvd_DDRM(int maxRows, int maxCols)
maxRows
- The expected largest matrix it might have to process. Can be larger.maxCols
- The expected largest matrix it might have to process. Can be larger.public SolvePseudoInverseSvd_DDRM()
public boolean setA(org.ejml.data.DMatrixRMaj A)
setA
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public double quality()
quality
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public void solve(org.ejml.data.DMatrixRMaj b, org.ejml.data.DMatrixRMaj x)
solve
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public void invert(org.ejml.data.DMatrixRMaj A_inv)
invert
in interface org.ejml.interfaces.linsol.LinearSolverDense<org.ejml.data.DMatrixRMaj>
public boolean modifiesA()
modifiesA
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public boolean modifiesB()
modifiesB
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public org.ejml.interfaces.decomposition.SingularValueDecomposition<org.ejml.data.DMatrixRMaj> getDecomposition()
getDecomposition
in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.DMatrixRMaj,org.ejml.data.DMatrixRMaj>
public void setThreshold(double threshold)
threshold
- The singular value thresholdpublic org.ejml.interfaces.decomposition.SingularValueDecomposition<org.ejml.data.DMatrixRMaj> getDecomposer()