/// <summary> /// Calculates the inverse of matrix. Returns null if non-invertible. /// </summary> public virtual Matrix Invert() { var inverse = MatrixFunctions.Invert(this.InnerMatrix); if (inverse == null) { return(null); } return(new Matrix(inverse)); }
// TODO: Test /// <summary> /// Creates projection matrix for the specified subspace. /// </summary> public static double[,] CreateProjectionMatrix(double[,] subspace) { var subspaceTranspose = MatrixFunctions.Transpose(subspace); double[,] value = MatrixFunctions.Multiply(subspaceTranspose, subspace); value = MatrixFunctions.Invert(value); value = MatrixFunctions.Multiply(value, subspaceTranspose); value = MatrixFunctions.Multiply(subspace, value); return(value); }