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()