Je révise les cours d'IPT de sup, je bloque un peu pour comprendre la traduction en Python de l'algorithme de Gauss-Jordan que j'ai dans mon cours
Pour les fonctions auxiliaires suivantes, y a pas de soucis :
Code : Tout sélectionner
def Echangeligne(A,i,j): # pour échanger les lignes i et j
X=numpy.copy(A[i])
A[i]=A[j]
A[j]=X
return A
def Dilatation(A,a,i): #pour multiplier la ligne i par a
A[i]=a*A[i]
return A
def Transvection(A,i,j,a): #pour ajouter a fois la ligne j à la ligne i
A[i]=A[i]+a*A[j]
return A
Code : Tout sélectionner
def PivotInversible(Ap,Bp) :
A=numpy.array(Ap,copy=True,dtype=float) #déjà pq faire des copies des 2 matrices en paramètres ?
B=numpy.array(Bp,copy=True,dtype=float)
n=A.shape[0] #pour avoir le nombre de lignes dans la matrice A ??
for k in range(n) : #k va parcourir toutes les lignes je pense ?
i=k #on change le nom du compteur, pourquoi pas
while i<n and A[i,k]==0 : #boucle qui va tourner jusqu'à la dernière ligne en
#même temps que le coeff à la ligne i et à la colonne
#k est nulle
i+=1
A=EchangeLigne(A,i,k) #puis je sais même plus ce qu'on fait ...
B=EchangeLigne(B,i,k)
pivot=A[k,k]
A=Dilatation(A,k,1/pivot)
B=Dilatation(B,k,1/pivot)
for j in range(n) :
if j !=k :
x=A[j,k]
A=Transvection(A,j,k,-x)
B=Transvection(B,j,k,-x)
return (A,B)
merci bcp