Demo entry 6355633

Dr

   

Submitted by Ov on Apr 14, 2017 at 02:10
Language: Python 3. Code size: 2.2 kB.

P = [] #Coordonées pivots
M = [] #Notre Matrice
C = [0] #Colonne
while C != []: #Construction de la matrice
    C = []
    C = eval("["+input()+"]")
    M.append(C)

del M[-1] #Car un [] s'ajoutera a la fin de la liste
print(M)
#Fonction descente avec en argument la matrice et les coordonnées des pivots
def descente(l_i, c_i, L):
    for i in range(l_i + 1, len(L)): #De la ligne en dessous a la dernière
        Lm = L[i] #Lm comme Ligne Modifiée, celle dont le coefficient sous le pivot sera eliminé
        a = L[i][c_i]/L[l_i][c_i] #Li ← Li - a*Lp, avec Lp la ligne du pivot
        for j in range(len(Lm)):
            b = Lm[j] - a*L[l_i][j] #Modification terme a terme de la ligne
            Lm.insert(j, b)
            del Lm[j+1]
        L.insert(i, Lm)
        del L[i + 1]

#La fonction de remontée ne voit que la premiere ligne modifiée
def remontee(l_i, c_i, L):
    for i in range(l_i): #De la premiere ligne à celle avant le pivot
        Lm = L[i]
        a = L[i][c_i]/L[l_i][c_i]
        for j in range(len(Lm)):
            b = Lm[j] - a*L[l_i][j]
            Lm.insert(j, b)
            del Lm[j+1]
        L.insert(i, Lm)
        del L[i + 1]
    
n, p = len(M), len(M[0]) #Dimensions de la matrice
for d in range(n): #d est le plafond
    #On cherche d'abord les coordonées du pivot le plus proche
    for k in range(p): #On balaye par colonne
        for f in range(len(M[:][0])): #On parcourt la colonne
            if M[:][k][f] != 0: #Si on tombe sur un coefficient non nul, on recupere ses coordonnées
                l = f
                c = k
                P.insert(0, [l,c]) #Le dernier pivot en premier pour la remontee
                break
            else:
                l, c = None, None
        if l != None and c != None: #Eviter se changer de colonne si l'on trouve un pivot
            break
    if l != d and l != None:
        print(P)
        print(M[P[0][0]][P[0][1]])
        M.insert(d,M[l]) #On monte la ligne au plafond
        del M[l+1]
        descente(P[0][0], P[0][1], M) #On peut effectuer la descente

#On procède enfin a la remontée:
for piv in P:
    remontee(piv[0][0], piv[0][1])

print(M)

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).