// Определтиьель public double Determinant() { double det = 0; int rows = n; if (rows == 1) { return(a[0, 0]); } squareMatrix na = new squareMatrix(rows - 1); for (int j = 0; j < rows; j++) { na = SubMatrix(0, j); if (j % 2 == 0) { det += na.Determinant() * a[0, j]; } else { det -= na.Determinant() * a[0, j]; } } return(det); }
//обртная матрица public squareMatrix Obratnya(squareMatrix m) { int rows = n; squareMatrix res = new squareMatrix(rows); squareMatrix na = new squareMatrix(rows - 1); double det = m.Determinant(); if (det == 0) { throw new Exception("Матрица вырожденная"); } int k; for (int i = 0; i < rows; i++) { if (i % 2 == 0) { k = 1; } else { k = -1; } for (int j = 0; j < rows; j++) { na = m.SubMatrix(i, j); res[j, i] = k * na.Determinant() / det; k = -k; } } return(res); }