public Matrix Cofactor() { List <Vector> vectors = new List <Vector>(); for (int i = 0; i < ColumnLength; i++) { List <float> entries = new List <float>(); for (int j = 0; j < RowLength; j++) { Matrix cofactorMatrix = Copy(); cofactorMatrix.DeleteRowVector(i); cofactorMatrix.DeleteColumnVector(j); float cofactor = cofactorMatrix.Determinant(); cofactor *= ((-1) ^ (i + j)); entries.Add(cofactor); } vectors.Add(new Vector(entries)); } return(new Matrix(vectors)); }
public float Determinant() { if (!IsSquare) { throw new ArithmeticException("Cannot compute the determinant of a non-square matrix"); } if (RowLength == 2 && ColumnLength == 2) { //Det = ad - bc return(this[0][0] * this[1][1] - this[0][1] * this[1][0]); } else { float det = 0; for (int i = 0; i < RowLength; i++) { float scalar = this[0][i]; Matrix reducedMatrix = Copy(); reducedMatrix.DeleteRowVector(0); reducedMatrix.DeleteColumnVector(i); det += ((-1) ^ i) * scalar * reducedMatrix.Determinant(); } return(det); } }
public static bool IsInversable(Matrix matrix) => matrix.Determinant() != 0;