Rechercher : dans
Par :

Determinant matrice

Dernière réponse le 28 avr 2009 à 12:23:49 sarah, le 28 avr 2009 à 11:03:20 
 Signaler ce message aux modérateurs

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)

Configuration: Windows XP
Firefox 3.0.9

Meilleures réponses pour « determinant matrice » dans :
Concaténer les vecteurs ou les matrices sous Matlab VoirL'opération de concaténation des variables de Matlab consiste à regrouper ces variables dans une seule (vecteur ou matrice). Exemple : |2 3 4| X= |1 2 5| |0 2 7| Avec : |9 6 8| Y= |5 6 2| |3 2 1| Donne...
Déterminer le format d'un fichier VoirLa méthode de base pour déterminer le type d'un fichier est de regarder son extension. Toutefois, il est parfois possible que l'extension ne corresponde pas ou bien que le fichier ne possède plus d'extension, dans le cas par exemple d'une erreur de...

1

quendistu, le 28 avr 2009 à 11:16:03
Répondre à quendistu

2

sarah, le 28 avr 2009 à 11:33:57

Merci, je me suis inspirée de cet exemple justement mais leur code est faux! Donc ça m'aide pas franchement!

Répondre à sarah

4

fiddy, le 28 avr 2009 à 11:52:28

Tu as dû mal t'inspirer alors, car leur code est correct ;-))).
Google is your friend

Répondre à fiddy

3

quendistu, le 28 avr 2009 à 11:43:51

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

Répondre à quendistu

5

fiddy, le 28 avr 2009 à 11:56:18

Utilise les balises de conservations de code (à droite de souligner) lorsque tu postes un programme et en particulier lorsque c'est du python.
copiemat=mat
Cela ne changera rien, étant donné que copiemat contiendra l'adresse de mat. Donc la modification de copiemat agira sur mat également.
Google is your friend

Répondre à fiddy

6

quendistu, le 28 avr 2009 à 12:00:25

Donc fiddy la question à laquelle répondre pour apporter quelquechose c'est :
comment copier la matrice au lieu de copier son adresse.
A toi

Répondre à quendistu

7

fiddy, le 28 avr 2009 à 12:14:40

comment copier la matrice au lieu de copier son adresse.
C'est ta question et non la sienne ça. Le lien donné marche parfaitement (je viens de tester).

Sinon pour répondre à ta question :

copieMat = copy.copy(mat) 

PS : n'oublie pas d'importer copy.

Cdlt
Google is your friend

Répondre à fiddy

8

quendistu, le 28 avr 2009 à 12:16:51

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

Répondre à quendistu

9

fiddy, le 28 avr 2009 à 12:22:15

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).
Google is your friend

Répondre à fiddy

10

 quendistu, le 28 avr 2009 à 12:23:49

Bravo

Répondre à quendistu