//méthode de calcul du determinant private static double CalculDeterminant(Matrice matrice, int ordre) { { double determinant = 0; Matrice temp = new Matrice(new double[ordre, ordre]); if (ordre == 1) { return(matrice[0, 0]); } else if (ordre == 2) { determinant = (matrice[0, 0] * matrice[1, 1] - matrice[0, 1] * matrice[1, 0]); return(determinant); } //pour matrice d'ordre > 2 else { for (int i = 0; i < ordre; i++) { Matrice mineure = new Matrice(new double[ordre - 1, ordre - 1]); mineure = matrice.Mineure(0, i); if (matrice.SigneComplement(1, i + 1) == true) { determinant += matrice[0, i] * CalculDeterminant(mineure, ordre - 1); } else { determinant -= matrice[0, i] * CalculDeterminant(mineure, ordre - 1); } } return(determinant); } } }
//méthode de calcul du determinant private static double CalculDeterminant(Matrice matrice, int ordre) { { //int p, h, k, i, j; double determinant = 0; Matrice temp = new Matrice(new double[ordre, ordre]); if (ordre == 1) { return(matrice[0, 0]); } else if (ordre == 2) { determinant = (matrice[0, 0] * matrice[1, 1] - matrice[0, 1] * matrice[1, 0]); Console.WriteLine(determinant); return(determinant); } //pour matrice d'ordre > 2 else { for (int i = 0; i < ordre; i++) { int ordreTmp = ordre - 1; Matrice mineure = new Matrice(new double[ordreTmp, ordreTmp]); mineure = matrice.Mineure(0, i); Console.WriteLine(mineure.AfficheMatrice()); if (matrice.SigneComplement(1, i + 1) == true) { determinant += matrice[0, i] * CalculDeterminant(mineure, ordreTmp); } else { determinant -= matrice[0, i] * CalculDeterminant(mineure, ordreTmp); } } //for (p = 0; p < ordre; p++) //{ // h = 0; // k = 0; // for (i = 1; i < ordre; i++) // { // for (j = 0; j < ordre; j++) // { // if (j == p) // { // continue; // } // temp[h, k] = matrice[i, j]; // k++; // if (k == ordre - 1) // { // h++; // k = 0; // } // } // } // determinant = determinant + matrice[0, p] * Math.Pow(-1, p) * CalculDeterminant(temp, ordre - 1); //} Console.WriteLine("" + ordre); return(determinant); } } }