Determinant matrice
sarah
-
quendistu Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
quendistu Messages postés 509 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aimerais calculer le déterminant d'une matrice.
J'effectue l'algorithme suivant:
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
B=supprimer(j,0,mat)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
Le probleme est que quand j'effectue la fonction supprimer alors mat perd sa ligne j et sa colonne 0 mais après il faut que je retrouve ma matrice de départ pour pouvoir supprimer sa ligne j+1 et sa colonne 0 sinon, d'une matrice 3*3 je passe a une 2*2 puis à un 1*1.
J'espere mettre fait comprendre. Merci de me donner un coup de main.(j'utilises python)
J'aimerais calculer le déterminant d'une matrice.
J'effectue l'algorithme suivant:
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
B=supprimer(j,0,mat)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
Le probleme est que quand j'effectue la fonction supprimer alors mat perd sa ligne j et sa colonne 0 mais après il faut que je retrouve ma matrice de départ pour pouvoir supprimer sa ligne j+1 et sa colonne 0 sinon, d'une matrice 3*3 je passe a une 2*2 puis à un 1*1.
J'espere mettre fait comprendre. Merci de me donner un coup de main.(j'utilises python)
5 réponses
sarah
Merci, je me suis inspirée de cet exemple justement mais leur code est faux! Donc ça m'aide pas franchement!
fiddy
Messages postés
11069
Date d'inscription
Statut
Contributeur
Dernière intervention
1 846
>
sarah
Tu as dû mal t'inspirer alors, car leur code est correct ;-))).
C'est bien ce que me suis dit ; pour réconcilier le besoin de supprimer des lignes et des colonnes et le besoin de conserver l'intégralité de la matrice, la fonction supprimer soit retourner une copie de la matrice tronquée et non la matrice passée tronquée elle même ; ou alors faire cette copie dans la fonstion Det elle-même.
Je ne m'y connais pas en python, mais ce serait comme ceci :
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
copiemat=mat
B=supprimer(j,0,copiemat)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
B=supprimer(j,0,matprime)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
Je ne m'y connais pas en python, mais ce serait comme ceci :
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
copiemat=mat
B=supprimer(j,0,copiemat)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
def Det(mat):
" retourne le déterminant de la matrice mat"
s=0
j=0
while j<3:
B=supprimer(j,0,matprime)
print B
if j%2==0:
s=s+mat[j][0]*Det(B)
else:
s=s-mat[j][0]*Det(B)
j=j+1
return s
Donc fiddy la question à laquelle répondre pour apporter quelquechose c'est :
comment copier la matrice au lieu de copier son adresse.
A toi
comment copier la matrice au lieu de copier son adresse.
A toi
La réponse de fiddy e faisant attendre, je propose une fonction Copiemat, inspirée de la fonction Addmat du site déjà cité :
def Addmat(M1,M2):
"Additionne deux matrices carrées"
N=len(M1)
M=[None]*N
for i in range (N):
M[i]=[0]*N
for j in range (N):
M[i][j]=M1[i][j]+M2[i][j]
return M
donc :
def Addmat(M1):
"Copie deux matrices carrées"
N=len(M1)
M=[None]*N
for i in range (N):
M[i]=[0]*N
for j in range (N):
M[i][j]=M1[i][j]
return M
voilààà
N=len(M1)
M=[None]*N
def Addmat(M1,M2):
"Additionne deux matrices carrées"
N=len(M1)
M=[None]*N
for i in range (N):
M[i]=[0]*N
for j in range (N):
M[i][j]=M1[i][j]+M2[i][j]
return M
donc :
def Addmat(M1):
"Copie deux matrices carrées"
N=len(M1)
M=[None]*N
for i in range (N):
M[i]=[0]*N
for j in range (N):
M[i][j]=M1[i][j]
return M
voilààà
N=len(M1)
M=[None]*N
La réponse de fiddy e faisant attendre, je propose une fonction Copiemat, inspirée de la fonction Addmat du site déjà cité :
J'ai répondu avant ton post (cf post 7).
Sinon, lorsque tu postes un code (surtout en python), utilise la balise prévue à cet effet (à droite du bouton souligner), sinon cela n'affiche pas l'indentation, et le code ne vaut rien (délimitation des blocs perdue).
J'ai répondu avant ton post (cf post 7).
Sinon, lorsque tu postes un code (surtout en python), utilise la balise prévue à cet effet (à droite du bouton souligner), sinon cela n'affiche pas l'indentation, et le code ne vaut rien (délimitation des blocs perdue).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question