Bonjour,
Je cherche une nouvelle methode pour inverser une matrice.
J'utilise actuellement la methode de Gauss-Jordan mais elle donne regulierement des erreurs.
Si vous voulez je peux vous joindre le code.
Bonjour,
Je cherche une nouvelle methode pour inverser une matrice.
J'utilise actuellement la methode de Gauss-Jordan mais elle donne regulierement des erreurs.
Si vous voulez je peux vous joindre le code.
peut tu nous le montré ?
Les pièges de l'Internet
Helix, réponse à une intrusion
"La plus grande gloire n'est pas de ne jamais tomber, mais de se relever à chaque chute." Confucius
"Si j'ai vu plus loin, c'est en me tenant sur les épaules de géants." Isaac Newton
ok,
Voila!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 void invert_mat( double ** mat, register int len_i) { int i,j,k; double val; make_mat( &mat2, len_i, 2*len_i); for(i=0; i<len_i; i++) { for(j=0; j<2*len_i; j++) { if (j<len_i) mat2[i][j]=mat[i][j]; else if(i==(j-len_i)) mat2[i][j]= 1; else mat2[i][j]=0; } } for(i=0; i<len_i; i++) // ligne { for(j=0; j<2*len_i; j++) mat2[i][j]=mat2[i][j]/mat2[i][i]; for(j=0; j<len_i; j++) { if(j!=i) { val = mat2[j][i]; for(k=0; k<2*len_i; k++) mat2[j][k] = mat2[j][k] - val * mat2[i][k]; } } } for(i=0; i<len_i; i++) for(j=0; j<len_i; j++) mat[j][i]=mat2[j][i+len_i]; //free_mat(mat2,len_i,2*len_i); }
Comment est déclarée mat dans un appel invert_mat( mat, len_i) ?
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 include <stdio.h> #include <conio.h> void main (){ int a[3][4]; int x[4][3]; int sum=0; //-------------------- input ------------------------ printf("\t\t\t OMAR ABO MAILEQ\n\t\t\t DEALINT WITH ARRAY\n\t\t\tQUDS OPEN UNVERSITY\n"); for (int i=0;i<3;i++) { printf("Enter four values: \n"); for (int j=0;j<4;j++) scanf("%d",&a[i][j]); } printf("\n\n"); //-------------------- output ------------------------ printf("THE ARRAY VALUS YOU INTERD: \n"); for (int i=0;i<3;i++) { for (int j=0;j<4;j++) printf("%d\t",a[i][j]); printf("\n");} //-------------------- sum --------------------------- for (int i=0;i<3;i++) { for (int j=0;j<4;j++) sum+=a[i][j];} printf("\nSUM OF ELEMENTS IS: %d\n\n",sum); //-------------------- make oposit ------------------- for (int i=0;i<4;i++) { for (int j=0;j<3;j++) x[i][j]=a[j][i];} //---------------------- output again ---------------- printf("\nNOW WE SWITCH THE ROWS & COLOMONS\n"); for (int i=0;i<4;i++) { for (int j=0;j<3;j++) printf("%d\t",x[i][j]); printf("\n");} //----------------------------------------------------- printf(" \n\n\t\t\tPRESS ANY KEY TO EXIT..."); getch(); } ]toujours le plus simple est le plus efficace
Non, ce que je veux dire, mat est-elle allouée par un malloc ou définie sous la forme int mat[3][3] par exemple ?
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Ceci calcule la transposée pas l'inverse, non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 //-------------------- make oposit ------------------- for (int i=0;i<4;i++) { for (int j=0;j<3;j++) x[i][j]=a[j][i];}
oui tout a fait c'est l'inverse de la matriceEnvoyé par seriousme
![]()
Une méthode est de diviser par le déterminant de la matrice la transposée de la matrice des cofacteurs.
Les calculs sont simples mais ce n'est peut être pas trés efficace.
Envoyé par Trap D
les matrices sont en effet allouees dynamiquement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void make_mat( double ***pmat, int len_i, int len_j) { int i; *pmat = (double **)malloc(len_i*sizeof(double *)); for(i=0;i<len_i;i++) { make_vect(&((*pmat)[i]),len_j); } }
et l'appel se fait sous cette forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part double **mat; make_mat(&mat,3,3);
Une remarque:
peut s'écrire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part *pmat = (double **)malloc(len_i*sizeof(double *));
Code : Sélectionner tout - Visualiser dans une fenêtre à part *pmat =malloc(len_i*sizeof(**pmat));
C'est mon premier module au langage c a la faculte . Parmi les choses que l'on avait appris au tout debut c'est la simplicite de l'algoritme, d'ou la simplicite du code est requise.Envoyé par seriousme
Le code de l'inversion de la matrice a ete fait par un collegue. Je ne vois pas ou est le probleme puisqu'il est claire que ca demande de remplacer les rangs par les colonnes et vis vers ca.![]()
Il me semble que dans ce cas là on parle de transposition, c'est tout.Je ne vois pas ou est le probleme puisqu'il est claire que ca demande de remplacer les rangs par les colonnes et vis vers ca.
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Bonjour,
Je tenais a preciser je cherche bien a inverser une matrice (mat^-1) et non pas a la transposer. L'inversion de matrice est un pb outrement plus complexe que le transposition (fonction par ailleurs que j'ai deja realisee).
Pourrait on m'aider sur ce point?
Merci a tous ceux qui font vivre cette discussion![]()
Que devient mat2[i][i] quand i == j? Est-ce que le reste des calculs pour cette ligne est correct? (A mon avis, non, et c'est là ton problème).Envoyé par babycrash
Envoyé par Jean-Marc.Bourguet
je n'ai effectivement pas cherche a debugger ce code aucune idee en fait de ce que deviens mat2[i][j] qd i==j?
ce que je sais est que le pgm fonctionne mais me donne des resultats aberrants
Si l'erreur se trouve la comment puis je la corrigee?
Merci, Pierre.
Partager