def test_produit_permut_g():
    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_g(matPermutation, mat)
        matInversePermut = permutation.matrice_permutation_inverse(matPermutation)
        if permutation.produit_permut_g(matInversePermut, result) != mat:
            nbErreur +=1
            print "Erreur lors du test de produit_permut_g(", matPermutation, ",", mat, ")"
    return nbErreur
def test_produit_permut_g():
    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_g(matPermutation, mat)
        matInversePermut = permutation.matrice_permutation_inverse(
            matPermutation)
        if permutation.produit_permut_g(matInversePermut, result) != mat:
            nbErreur += 1
            print "Erreur lors du test de produit_permut_g(", matPermutation, ",", mat, ")"
    return nbErreur
def resolution_cramer_avec_plu(P,L,U,b):
    """P : une matrice de permutation
    L : une matrice triangulaire inferieure
    U : une matrice triangulaire superieure
    b : une liste correspondant au vecteur B dans l'equation PLUX = B
    PLUX = B doit etre un systeme de cramer"""

    b = [[b[i]]for i in range(len(b))]
    b = permutation.produit_permut_g(permutation.transpose(P), b)
    b = [b[i][0] for i in range(len(b))]
    Y = resolution_tri_inf_cramer(L, b)
    X = resolution_tri_sup_cramer(U, Y)
    return X
def resolution_cramer(a,b):
    """a : une matrice
    b : une liste correspondant au vecteur B dans l'equation AX = B
    Le systeme A*X=B doit etre de Cramer
    sortie : la solution de A*X=B"""

    P, L, U = decomposition.decomposition_plu(a)
    P = permutation.matrice_permutation_inverse(P)
    b = [[b[i]]for i in range(len(b))]
    b = permutation.produit_permut_g(permutation.transpose(P), b)
    b = [b[i][0] for i in range(len(b))]
    Y = resolution_tri_inf_cramer(L, b)
    X = resolution_tri_sup_cramer(U, Y)
    return X