Class SolvePseudoInverseSvd_FDRM

java.lang.Object
org.ejml.dense.row.linsol.svd.SolvePseudoInverseSvd_FDRM
All Implemented Interfaces:
org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>, org.ejml.interfaces.linsol.LinearSolverDense<org.ejml.data.FMatrixRMaj>

@Generated("org.ejml.dense.row.linsol.svd.SolvePseudoInverseSvd_DDRM") public class SolvePseudoInverseSvd_FDRM extends Object implements org.ejml.interfaces.linsol.LinearSolverDense<org.ejml.data.FMatrixRMaj>

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 Details

    • SolvePseudoInverseSvd_FDRM

      public SolvePseudoInverseSvd_FDRM(int maxRows, int maxCols)
      Creates a new solver targeted at the specified matrix size.
      Parameters:
      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.
    • SolvePseudoInverseSvd_FDRM

      public SolvePseudoInverseSvd_FDRM()
      Creates a solver targeted at matrices around 100x100
  • Method Details

    • setA

      public boolean setA(org.ejml.data.FMatrixRMaj A)
      Specified by:
      setA in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • quality

      public double quality()
      Specified by:
      quality in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • solve

      public void solve(org.ejml.data.FMatrixRMaj b, org.ejml.data.FMatrixRMaj x)
      Specified by:
      solve in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • invert

      public void invert(org.ejml.data.FMatrixRMaj A_inv)
      Specified by:
      invert in interface org.ejml.interfaces.linsol.LinearSolverDense<org.ejml.data.FMatrixRMaj>
    • modifiesA

      public boolean modifiesA()
      Specified by:
      modifiesA in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • modifiesB

      public boolean modifiesB()
      Specified by:
      modifiesB in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • getDecomposition

      public org.ejml.interfaces.decomposition.SingularValueDecomposition_F32<org.ejml.data.FMatrixRMaj> getDecomposition()
      Specified by:
      getDecomposition in interface org.ejml.interfaces.linsol.LinearSolver<org.ejml.data.FMatrixRMaj,org.ejml.data.FMatrixRMaj>
    • setThreshold

      public void setThreshold(float threshold)
      Specify the relative threshold used to select singular values. By default it's UtilEjml.F_EPS.
      Parameters:
      threshold - The singular value threshold
    • getDecomposer

      public org.ejml.interfaces.decomposition.SingularValueDecomposition<org.ejml.data.FMatrixRMaj> getDecomposer()