/** * <p> * Checks to see if the matrix is positive semidefinite: * </p> * <p> * x<sup>T</sup> A x ≥ 0<br> * for all x where x is a non-zero vector and A is a symmetric matrix. * </p> * * @param A square symmetric matrix. Not modified. * * @return True if it is positive semidefinite and false if it is not. */ public static bool isPositiveSemidefinite(FMatrixRMaj A) { if (!isSquare(A)) { return(false); } EigenDecomposition_F32 <FMatrixRMaj> eig = DecompositionFactory_FDRM.eig(A.numCols, false); if (eig.inputModified()) { A = (FMatrixRMaj)A.copy(); } eig.decompose(A); for (int i = 0; i < A.numRows; i++) { Complex_F32 v = eig.getEigenvalue(i); if (v.getReal() < 0) { return(false); } } return(true); }
public virtual bool decompose(FMatrixRMaj orig) { A.set(orig); symmetric = MatrixFeatures_FDRM.isSymmetric(A, tol); return(symmetric ? symmetricAlg.decompose(A) : generalAlg.decompose(A)); }