def test_resolution_cramer(): nbErreur = 0 for i in range(2, 20): A = permutation.matrice_aleatoire(i) while applications.determinant_plu(A) == 0: A = permutation.matrice_aleatoire(i) B = [random.randint(-10, 10) for j in range(i)] res = applications.resolution_cramer(A, B) erreur = False for j in range(i): somme = 0 for k in range(i): somme += A[j][k] * res[k] if round(somme, 0) != B[j]: erreur = True if erreur: nbErreur += 1 print "erreur lors du test de :" print "A = ", A print "B = ", B #On compare maintenant les resultats obtenus grace a notre algorithme #de decomposition a ceux obtenus avec les decompositions de sage listeSage = [] listeMatrice = [] listeB = [] listeSage.append([[[0, 1], [1, 0]], [[1, 0], [1 / 2., 1]], [[2, -2], [0, 2]]]) listeMatrice.append([[1, 1], [2, -2]]) listeB.append([1, 3]) listeSage.append([[[0, 0, 1], [1, 0, 0], [0, 1, 0]], [[1, 0, 0], [2 / 3., 1, 0], [1 / 3., 0, 1]], [[3, 6, 5], [0, -2, -4 / 3.], [0, 0, -2 / 3.]]]) listeMatrice.append([[1, 2, 1], [3, 6, 5], [2, 2, 2]]) listeB.append([2, 5, 3]) for i in range(len(listeSage)): P, L, U = listeSage[i] res1 = applications.resolution_cramer_avec_plu(P, L, U, listeB[i]) res2 = applications.resolution_cramer(listeMatrice[i], listeB[i]) if not (liste_egale(res1, res2)): nbErreur += 1 print "erreur lors du test de :" print "mat : ", listeMatrice[i] print "B :", listeB[i] print "Le resultat varie selon la decomposition utilisee" print "Le resultat obtenu avec la decomposition de sage est" print res1 print "Le resultat obtenu avec notre de composition est " print res2 return nbErreur
def test_resolution_cramer(): nbErreur = 0 for i in range (2, 20): A = permutation.matrice_aleatoire(i) while applications.determinant_plu(A) == 0: A = permutation.matrice_aleatoire(i) B = [random.randint(-10,10) for j in range(i)] res = applications.resolution_cramer(A, B) erreur = False for j in range(i): somme = 0 for k in range(i): somme += A[j][k] * res[k] if round(somme,0) != B[j] : erreur = True if erreur: nbErreur += 1 print "erreur lors du test de :" print "A = ", A print "B = ", B #On compare maintenant les resultats obtenus grace a notre algorithme #de decomposition a ceux obtenus avec les decompositions de sage listeSage=[] listeMatrice =[] listeB = [] listeSage.append([[[0,1],[1,0]],[[1,0],[1/2.,1]],[[2,-2],[0,2]]]) listeMatrice.append([[1,1],[2,-2]]) listeB.append([1,3]) listeSage.append([[[0,0,1],[1,0,0],[0,1,0]],[[1,0,0],[2/3.,1,0],[1/3.,0,1]], [[3,6,5],[0,-2,-4/3.],[0,0,-2/3.]]]) listeMatrice.append([[1,2,1],[3,6,5],[2,2,2]]) listeB.append([2,5,3]) for i in range(len(listeSage)): P,L,U = listeSage[i] res1 = applications.resolution_cramer_avec_plu(P, L, U, listeB[i]) res2 = applications.resolution_cramer(listeMatrice[i], listeB[i]) if not(liste_egale(res1,res2)) : nbErreur += 1 print "erreur lors du test de :" print "mat : ",listeMatrice[i] print "B :", listeB[i] print "Le resultat varie selon la decomposition utilisee" print "Le resultat obtenu avec la decomposition de sage est" print res1 print "Le resultat obtenu avec notre de composition est " print res2 return nbErreur
def test_produit_permut_d(): nbErreur = 0 #teste avec des matrices aleatoires for i in range(1,20) : mat = permutation.matrice_aleatoire(i) permut = permutation.permutation_aleatoire(i) matPermutation = permutation.matrice_permutation(permut) result = permutation.produit_permut_d(matPermutation,mat) matInversePermut = permutation.matrice_permutation_inverse(matPermutation) if permutation.produit_permut_d(matInversePermut,result) != mat: nbErreur +=1 print "Erreur lors du test de produit_permut_d(", mat, ",", matPermutation, ")" return nbErreur
def test_triangulaire_inf(): nbErreur = 0 #Genere des matrices triangulaires superieures for i in range(2, 20): mat = permutation.matrice_aleatoire(i) for j in range(0, i - 1): for k in range(j + 1, i): mat[j][k] = 0 if not (decomposition.triangulaire_inf(mat)): nbErreur += 1 print "erreur lors du test de", mat print "Le resultat attendu etait True" #Genere des matrices n'etant pas triangulaires superieures for i in range(2, 20): mat = permutation.matrice_aleatoire(i) j = random.randint(0, i - 2) k = random.randint(j + 1, i - 1) mat[j][k] = 1 if decomposition.triangulaire_inf(mat): nbErreur += 1 print "erreur lors du test de", mat print "le resultat attendu etait False" return nbErreur
def test_produit_permut_d(): nbErreur = 0 #teste avec des matrices aleatoires for i in range(1, 20): mat = permutation.matrice_aleatoire(i) permut = permutation.permutation_aleatoire(i) matPermutation = permutation.matrice_permutation(permut) result = permutation.produit_permut_d(matPermutation, mat) matInversePermut = permutation.matrice_permutation_inverse( matPermutation) if permutation.produit_permut_d(matInversePermut, result) != mat: nbErreur += 1 print "Erreur lors du test de produit_permut_d(", mat, ",", matPermutation, ")" return nbErreur
def test_triangulaire_inf(): nbErreur = 0 #Genere des matrices triangulaires superieures for i in range(2,20): mat = permutation.matrice_aleatoire(i) for j in range(0,i-1): for k in range(j+1,i): mat[j][k] = 0 if not(decomposition.triangulaire_inf(mat)): nbErreur += 1 print "erreur lors du test de", mat print "Le resultat attendu etait True" #Genere des matrices n'etant pas triangulaires superieures for i in range(2,20): mat = permutation.matrice_aleatoire(i) j = random.randint(0,i-2) k = random.randint(j+1,i-1) mat[j][k] = 1 if decomposition.triangulaire_inf(mat): nbErreur += 1 print "erreur lors du test de", mat print "le resultat attendu etait False" return nbErreur
def test_produit_transvection_g(): nbErreur = 0 for i in range(2,20): mat = permutation.matrice_aleatoire(i); matSave = [lig[:] for lig in mat] j = random.randint(0,i-1) k = random.randint(0,i-1) alpha = random.randint(-10, 10) while(k==j): k=random.randint(0,i-1) mTransvec = transvection.matrice_transvection(j, alpha, k, i) mat = transvection.produit_transvection_g(mTransvec, mat) if not(all([(mat[j][l] == matSave[j][l]+matSave[k][l]*alpha) for l in range(len(mat))])): print "erreur lors du test de :" print "mat = ", matSave print "i =", j print "j =", k print "alpha =", alpha print "" nbErreur +=1 return nbErreur
def test_determinant_plu(): nbErreur = 0 # On utilise ici l'algorithme de calcul du determinant recursif # on doit donc se limiter a des matrices de petite taille for i in range(1, 5): mat = permutation.matrice_aleatoire(i) if determinant(mat, 0) != round(applications.determinant_plu(mat),0): nbErreur += 1 print "Erreur lors du test de ", mat print "" #Test avec des matrices necessitants des permutations listMat =[] listMat.append([[2,4,2,0],[1,3,1,0],[1,2,1,3],[1,2,2,1]]) listMat.append([[0,4,2,0],[1,3,1,0],[1,2,1,3],[1,2,2,1]]) listMat.append([[0,3,1,0],[2,4,2,0],[1,2,1,3],[1,2,2,1]]) for mat in listMat: if determinant(mat, 0) != round(applications.determinant_plu(mat),0): nbErreur += 1 print "Erreur lors du test de ", mat print "" return nbErreur
def test_determinant_plu(): nbErreur = 0 # On utilise ici l'algorithme de calcul du determinant recursif # on doit donc se limiter a des matrices de petite taille for i in range(1, 5): mat = permutation.matrice_aleatoire(i) if determinant(mat, 0) != round(applications.determinant_plu(mat), 0): nbErreur += 1 print "Erreur lors du test de ", mat print "" #Test avec des matrices necessitants des permutations listMat = [] listMat.append([[2, 4, 2, 0], [1, 3, 1, 0], [1, 2, 1, 3], [1, 2, 2, 1]]) listMat.append([[0, 4, 2, 0], [1, 3, 1, 0], [1, 2, 1, 3], [1, 2, 2, 1]]) listMat.append([[0, 3, 1, 0], [2, 4, 2, 0], [1, 2, 1, 3], [1, 2, 2, 1]]) for mat in listMat: if determinant(mat, 0) != round(applications.determinant_plu(mat), 0): nbErreur += 1 print "Erreur lors du test de ", mat print "" return nbErreur
def test_decomposition_plu(): nbErreur = 0 #Tests avec des matrices aleatoires for i in range(2, 20): mat = permutation.matrice_aleatoire(i) PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not (matrices_egales(res, mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not (decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not (decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not (permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not (permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not (permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Tests avec des matrices necessitants des permutations: for i in range(2, 20): mat = permutation.matrice_aleatoire(i) lig = random.randint(0, i - 2) for j in range(i - 1): mat[lig][j] = 0 PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not (matrices_egales(res, mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not (decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not (decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not (permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not (permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not (permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Test avec des matrices ayant des colonnes nulles for i in range(10, 20): mat = permutation.matrice_aleatoire(i) for j in range(0, i): mat[j][1] = mat[j][0] mat[j][3] = mat[j][2] mat[j][5] = mat[j][4] mat[0][j] = 0 PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not (matrices_egales(res, mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not (decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not (decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not (permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not (permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not (permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Tests avec des matrices choisies listeMatrice = [] listeMatrice.append([[1, 2, 1], [3, 6, 5], [2, 2, 2]]) listeMatrice.append([[1, 2, 1, 1], [3, 6, 5, 4], [2, 2, 2, 1], [2, 3, 4, 1]]) listeMatrice.append([[1, 2, 1, 1], [3, 6, 3, 4], [2, 2, 2, 1], [2, 3, 4, 1]]) listeMatrice.append([[1, 2, 1, 1], [3, 6, 3, 4], [4, 2, 4, 1], [2, 3, 4, 1]]) listeMatrice.append([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2, 2, 2, 8], [1, 2, 4, 3, 4, 4, 8, 6, 2, 1], [6, 1, 2, 4, 3, 7, 6, 5, 3, 1], [1, 2, 4, 1, 0, 0, 0, 1, 4, 2], [12, 4, 3, 8, 6, 1, -3, 1, 8, 8], [8, 4, 6, 3, 4, 5, 2, 1, 1, 1], [-12, 3, 4, 5, 0, 0, 1, 3, 2, 1], [7, 7, 5, 2, 1, 4, 9, 6, 3, 4], [-3, -7, 1, 2, 0, 0, 8, 4, 6, 7]]) for mat in listeMatrice: PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not (matrices_egales(res, mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not (decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not (decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not (permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not (permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not (permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" return nbErreur
def test_decomposition_plu(): nbErreur = 0 #Tests avec des matrices aleatoires for i in range(2,20): mat = permutation.matrice_aleatoire(i) PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not(matrices_egales(res,mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not(decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not(decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not(permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not(permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not(permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Tests avec des matrices necessitants des permutations: for i in range(2, 20): mat = permutation.matrice_aleatoire(i) lig = random.randint(0, i-2) for j in range(i-1): mat[lig][j] = 0 PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not(matrices_egales(res,mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not(decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not(decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not(permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not(permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not(permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Test avec des matrices ayant des colonnes nulles for i in range(10,20): mat = permutation.matrice_aleatoire(i) for j in range(0,i): mat[j][1] = mat[j][0] mat[j][3] = mat[j][2] mat[j][5] = mat[j][4] mat[0][j] = 0 PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not(matrices_egales(res,mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not(decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not(decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not(permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not(permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not(permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" #Tests avec des matrices choisies listeMatrice = [] listeMatrice.append([[1,2,1],[3,6,5],[2,2,2]]) listeMatrice.append([[1,2,1,1],[3,6,5,4],[2,2,2,1],[2,3,4,1]]) listeMatrice.append([[1,2,1,1],[3,6,3,4],[2,2,2,1],[2,3,4,1]]) listeMatrice.append([[1,2,1,1],[3,6,3,4],[4,2,4,1],[2,3,4,1]]) listeMatrice.append([[1,1,1,1,1,1,1,1,1,1],[2,2,2,2,2,2,2,2,2,8],[1,2,4,3,4,4,8,6,2,1],[6,1,2,4,3,7,6,5,3,1],[1,2,4,1,0,0,0,1,4,2],[12,4,3,8,6,1,-3,1,8,8],[8,4,6,3,4,5,2,1,1,1],[-12,3,4,5,0,0,1,3,2,1],[7,7,5,2,1,4,9,6,3,4],[-3,-7,1,2,0,0,8,4,6,7]]) for mat in listeMatrice : PLU = decomposition.decomposition_plu(mat) temp = produit(PLU[0], PLU[1]) res = produit(temp, PLU[2]) if not(matrices_egales(res,mat)): nbErreur += 1 print "erreur lors du produit de trois matrices", mat if not(decomposition.triangulaire_inf(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas triangulaire inferieure" if not(decomposition.triangulaire_sup(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas triangulaire superieure" if not(permutation.est_carree(PLU[0])): nbErreur += 1 print "erreur", mat, "P n'est pas carree" if not(permutation.est_carree(PLU[1])): nbErreur += 1 print "erreur", mat, "L n'est pas carree" if not(permutation.est_carree(PLU[2])): nbErreur += 1 print "erreur", mat, "U n'est pas carree" return nbErreur