1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| //----- parcours de la matrice pour verrifier que son determinant n'est pas nul -----
Indice = 1
Répéter
//on cherche d'abord sur la ligne
LigneNulle = Vrai
//on se place sur la ligne voulu
Ligne = Indice
//et on parcourt chaque colonne
Colonne = 1
Répéter
//des qu'on tombe sur un coefficient different de zero
Si (TabCoeffs(Ligne, Colonne) <> 0) Alors
//on dit que la ligne n'est pas nulle
LigneNulle = Faux
FinSi
//on passe a la colonne suivante
Colonne = Colonne + 1
//on sort s'il n'y a plus de colonnes
//ou si on sait que la ligne n'est pas nulle
Jusqu 'à ((Colonne > Dimension) Ou (LigneNulle = Faux))
//si la ligne est bonne, on regarde la colonne
//par le meme principe
Si (LigneNulle = Faux) Alors
ColonneNulle = Vrai
Colonne = Indice
Ligne = 1
Répéter
Si (TabCoeffs(Ligne, Colonne) <> 0) Alors
ColonneNulle = Faux
FinSi
Ligne = Ligne + 1
Jusqu 'à ((Ligne > Dimension) Ou (ColonneNulle = Faux))
FinSi
//une fois qu'on a regarde ligne et colonne,
//on passe a l'indice suivant
Indice = Indice + 1
//on s'arrete si on a parcouru toute la matrice
//ou si on a trouve une ligne ou une colonne nulle
Jusqu 'à ((Indice > Dimension) Ou (LigneNulle = Vrai) Ou (ColonneNulle = Vrai))
//si une ligne ou une colonne est nulle, le determinant est nul
Si (LigneNulle = Vrai) Ou (ColonneNulle = Vrai) Alors
DeterminantCalcule = 0
//sinon, on se lance dans le calcul
Else
//----- methode par la triangularisation (pivot de gauss) ----------------------------
//----- le determinant d'une matrice triangulaire est le produit de sa diagonale -----
//on parcourt la matrice ligne par ligne
LignePivot = 1
Répéter
//initialisation du booleen d'arret de la fonction
ArretFonction = Faux
//si le coefficient de la diagonale est nul
Si (TabCoeffs(LignePivot, LignePivot) = 0) Alors
//on cherche a permutter la ligne avec une autre, dont le coeff n'est pas nul
LignePermutation = LignePivot + 1
//on parcourt les lignes en dessous de la ligne actuelle
Tant que ((LignePivot + 1 <= Dimension) et (PermutationEffectuee = Faux))
//des qu'un coeff n'est pas nul
Si (TabCoeffs(LignePermutation, LignePivot) <> 0) Alors
//on inverse les deux lignes
PermutterLigne(LignePivot, LignePermutation)
PermutationEffectuee = Vrai
FinSi
//on s'arrete si on a parcouru toutes les lignes
//ou si on a effectue une permutation
FinTq
//si pas de permutation effectuee, on s'arrete car un coefficient de la diagonale est nul
Si (PermutationEffectuee = Faux) Alors
ArretFonction = Vrai
FinSi
FinSi
Si (ArretFonction = Faux) Alors
//on met les coefficients dans la colonne du pivot a zero
Pour Ligne <- LignePivot + 1 à Dimension - 1
//calcul du coefficient pour l'opération
CoefficientMultiplication = -TabCoeffs(Ligne, Ligne) / TabCoeffs(LignePivot, Ligne)
//Ly <- Ly - u Lx
OperationSurLigne(Ligne, LignePivot, CoefficientMultiplication)
FinPour
FinSi
Jusqu'à ((LignePivot > Dimension) Ou (ArretFonction = Vrai))
//----- Calcul du determinant -----
//Si on est sorti a cause d'un coeff sur la diagonale nul, le determinant est nul
Si (ArretFonction = Vrai) Alors
DeterminantCalcule = Faux
Sinon
//on calcule le determinant en faisant le produit de la diagonale
DeterminantCalcule = 1
Pour Ligne <- 1 à Dimension
DeterminantCalcule = DeterminantCalcule * TabCoeffs(Ligne, Ligne)
FinPour
FinSi
FinSi
Retourner(DeterminantCalcule) |
Partager