// Function to calculate and store inverse, returns false if Matrix is singular public MatrixSlow Inverse() { int N = InnerMatrix.GetUpperBound(0) + 1; double[,] inverse = new double[N, N]; // Find determinant of A[][] double det = Determinant(InnerMatrix, N); if (det == 0) { throw new Exception("Singular Matrix, can't find its inverse"); } // Find adjoint double[,] adj = Adjoint(InnerMatrix); // Find Inverse using formula "inverse(A) = adj(A)/det(A)" for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { inverse[i, j] = adj[i, j] / det; } } return(MatrixSlow.CreateWithArray(inverse)); }
public MatrixSlow Transpose() { double[,] transpose = new double[_Column, _Row]; for (int i = 0; i < _Row; i++) { for (int j = 0; j < _Column; j++) { transpose[j, i] = InnerMatrix[i, j]; } } return(MatrixSlow.CreateWithArray(transpose)); }