Inverse d'une matrice binaire
Fermé
Kia
-
1 oct. 2011 à 17:14
Kia284 Messages postés 4 Date d'inscription samedi 1 octobre 2011 Statut Membre Dernière intervention 8 octobre 2011 - 8 oct. 2011 à 18:05
Kia284 Messages postés 4 Date d'inscription samedi 1 octobre 2011 Statut Membre Dernière intervention 8 octobre 2011 - 8 oct. 2011 à 18:05
A voir également:
- Inverse binaire
- Annuaire inversé - Guide
- Ecran inversé - Guide
- Codage binaire - Guide
- Meilleur annuaire inversé portable gratuit ✓ - Forum Mobile
- Annuaire inversé gratuit liste rouge - Forum Mobile
3 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
1 oct. 2011 à 17:24
1 oct. 2011 à 17:24
Pour être inversible, une matrice doit être carré et avoir un déterminant non nul.
Tes erreurs de dimensions incorrectes proviennent certainement d'une matrice non-carré.
Pour les méthode d'inversion, regarde sur Wikipédia, la méthode des cofacteurs est la plus utilisée à la main, et la plus facile à implémenter, même si je doute qu'elle soit la plus efficace à cause du haut degré de récursivité dans le calcul des déterminants...
Tes erreurs de dimensions incorrectes proviennent certainement d'une matrice non-carré.
Pour les méthode d'inversion, regarde sur Wikipédia, la méthode des cofacteurs est la plus utilisée à la main, et la plus facile à implémenter, même si je doute qu'elle soit la plus efficace à cause du haut degré de récursivité dans le calcul des déterminants...
A =
0 0 0 1 0 0 0 1 0 1
1 1 1 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 1 0 0 0 1 0 1 1
1 0 0 0 1 0 0 0 1 0
0 0 1 0 1 0 0 1 0 0
1 0 0 0 0 1 0 1 0 0
0 1 0 0 0 1 0 0 0 1
size(A)
ans =
10 10
A_GF=gf(A) % Jusqu'ici ca marche
A_inv= inv(A_GF) % Mais ici on indique que la matrice n'est pas inversible pourtant c carree [10X10]
det(A)
ans =
30
% Et le determinant est non nul!
Tu as une idee?
0 0 0 1 0 0 0 1 0 1
1 1 1 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 1 0 0 0 1 0 1 1
1 0 0 0 1 0 0 0 1 0
0 0 1 0 1 0 0 1 0 0
1 0 0 0 0 1 0 1 0 0
0 1 0 0 0 1 0 0 0 1
size(A)
ans =
10 10
A_GF=gf(A) % Jusqu'ici ca marche
A_inv= inv(A_GF) % Mais ici on indique que la matrice n'est pas inversible pourtant c carree [10X10]
det(A)
ans =
30
% Et le determinant est non nul!
Tu as une idee?
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
1 oct. 2011 à 18:10
1 oct. 2011 à 18:10
C'est quoi comme langage ou logiciel ?
Kia284
Messages postés
4
Date d'inscription
samedi 1 octobre 2011
Statut
Membre
Dernière intervention
8 octobre 2011
1 oct. 2011 à 18:17
1 oct. 2011 à 18:17
C'est Matlab...
Kia284
Messages postés
4
Date d'inscription
samedi 1 octobre 2011
Statut
Membre
Dernière intervention
8 octobre 2011
1 oct. 2011 à 18:18
1 oct. 2011 à 18:18
Tu es familier a Matlab?
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
1 oct. 2011 à 18:28
1 oct. 2011 à 18:28
Je pense que le problème c'est que tu ne fais pas l'inverse de A, mais de A_GF.
J'imagine que A_GF n'est pas inversible d'où ton problème. Fais directement A_inv = inv(A)
J'imagine que A_GF n'est pas inversible d'où ton problème. Fais directement A_inv = inv(A)
Kia284
Messages postés
4
Date d'inscription
samedi 1 octobre 2011
Statut
Membre
Dernière intervention
8 octobre 2011
1 oct. 2011 à 20:05
1 oct. 2011 à 20:05
inv(A) est utilise pour les matrices qui contiennent des nombres entiers naturels comme [ 2 3;4 6] ... Le fait que j'utilise que des codes binaires m'empeche d'utiliser inv(A) directement ..
Si je fais inv(A), j'ai
0.0000 0.3000 -0.4000 0.4000 -0.3000 -0.1000 0.5000 -0.2000 0.2000 0.1000
0 0.2000 0.4000 0.6000 -0.2000 -0.4000 0.0000 0.2000 -0.2000 0.4000
-0.3333 0.2667 -0.1333 -0.5333 0.0667 0.4667 -0.3333 0.2667 0.0667 -0.1333
0.3333 0.2333 0.1333 -0.4667 0.4333 0.0333 -0.1667 -0.2667 -0.0667 -0.3667
-0.0000 -0.1000 -0.2000 0.2000 0.1000 -0.3000 0.5000 0.4000 -0.4000 0.3000
-0.3333 -0.1333 0.0667 -0.7333 0.4667 0.2667 -0.3333 -0.1333 0.4667 0.0667
0 0 0 1.0000 0 0 0 0 0 0
0.3333 -0.1667 0.3333 0.3333 -0.1667 -0.1667 -0.1667 0.3333 0.3333 -0.1667
0 -0.2000 0.6000 -0.6000 0.2000 0.4000 -0.0000 -0.2000 0.2000 -0.4000
0.3333 -0.0667 -0.4667 0.1333 -0.2667 0.1333 0.3333 -0.0667 -0.2667 0.5333
C'est pour cela que j'ai converti la matrice en champ galois pour pouvoir travailler en binaire et utiliser modulo-2 (EX-OR) pour faire la multiplication entre 2 matrices..
Certes, tu as raison.. C'est A_GF qui n'est pas inversible.. J'ai verifie..
Je vais essaye de le convertir en mode primitif et ensuite faire l'inverse..
Merciii ..
Si je fais inv(A), j'ai
0.0000 0.3000 -0.4000 0.4000 -0.3000 -0.1000 0.5000 -0.2000 0.2000 0.1000
0 0.2000 0.4000 0.6000 -0.2000 -0.4000 0.0000 0.2000 -0.2000 0.4000
-0.3333 0.2667 -0.1333 -0.5333 0.0667 0.4667 -0.3333 0.2667 0.0667 -0.1333
0.3333 0.2333 0.1333 -0.4667 0.4333 0.0333 -0.1667 -0.2667 -0.0667 -0.3667
-0.0000 -0.1000 -0.2000 0.2000 0.1000 -0.3000 0.5000 0.4000 -0.4000 0.3000
-0.3333 -0.1333 0.0667 -0.7333 0.4667 0.2667 -0.3333 -0.1333 0.4667 0.0667
0 0 0 1.0000 0 0 0 0 0 0
0.3333 -0.1667 0.3333 0.3333 -0.1667 -0.1667 -0.1667 0.3333 0.3333 -0.1667
0 -0.2000 0.6000 -0.6000 0.2000 0.4000 -0.0000 -0.2000 0.2000 -0.4000
0.3333 -0.0667 -0.4667 0.1333 -0.2667 0.1333 0.3333 -0.0667 -0.2667 0.5333
C'est pour cela que j'ai converti la matrice en champ galois pour pouvoir travailler en binaire et utiliser modulo-2 (EX-OR) pour faire la multiplication entre 2 matrices..
Certes, tu as raison.. C'est A_GF qui n'est pas inversible.. J'ai verifie..
Je vais essaye de le convertir en mode primitif et ensuite faire l'inverse..
Merciii ..
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
1 oct. 2011 à 23:41
1 oct. 2011 à 23:41
Une question m'interpelle : quel algèbre utilises-tu pour faire les calculs ?
Premier problème : tu dis que le déterminant est égal à 30, je suis d'accord si on parle en nombres, mais 30 n'est pas un nombre binaire !
Autre problème, je prends une matrice A=[[1,1][0,1]] et je cherche son inverse X.
En supposant que X=[[a,b][c,d]] j'obtient A.X=[[a+c,b+d][c,d]].
Or par définition de l'inverse de A, on doit avoir A.X=I. D'où a+c=1, b+d=0, c=0, d=1.
Donc avec c=0 et d=1, je trouve facilement a=1. Mais pour b tu as b+1=0...
Est-ce que tu considère que b vaut 1 et que donc 1+1=0 ?
Or dans ce cas ce n'est plus l'algèbre de Boole... mais du Z/2Z !
Si tu veut vraiment rester sur des matrices binaires avec l'algèbre de Boole, l'inversion d'une matrice n'aurait donc pas de sens !
Evidemment, je ne le crie pas trop fort, car j'avoue n'avoir jamais étudié les matrices binaires, il y a peut-être des règles particulière de calcul qui m'échappe. Mais je viens de te développer mon raisonnement juste au-dessus, et j'arrive à une contradiction si je fais une inversion de matrice...
Premier problème : tu dis que le déterminant est égal à 30, je suis d'accord si on parle en nombres, mais 30 n'est pas un nombre binaire !
Autre problème, je prends une matrice A=[[1,1][0,1]] et je cherche son inverse X.
En supposant que X=[[a,b][c,d]] j'obtient A.X=[[a+c,b+d][c,d]].
Or par définition de l'inverse de A, on doit avoir A.X=I. D'où a+c=1, b+d=0, c=0, d=1.
Donc avec c=0 et d=1, je trouve facilement a=1. Mais pour b tu as b+1=0...
Est-ce que tu considère que b vaut 1 et que donc 1+1=0 ?
Or dans ce cas ce n'est plus l'algèbre de Boole... mais du Z/2Z !
Si tu veut vraiment rester sur des matrices binaires avec l'algèbre de Boole, l'inversion d'une matrice n'aurait donc pas de sens !
Evidemment, je ne le crie pas trop fort, car j'avoue n'avoir jamais étudié les matrices binaires, il y a peut-être des règles particulière de calcul qui m'échappe. Mais je viens de te développer mon raisonnement juste au-dessus, et j'arrive à une contradiction si je fais une inversion de matrice...
Kia284
Messages postés
4
Date d'inscription
samedi 1 octobre 2011
Statut
Membre
Dernière intervention
8 octobre 2011
8 oct. 2011 à 18:05
8 oct. 2011 à 18:05
Desole pour le super retard... J'essaye toujours de dechiffrer l'inverse de la matrice binaire..
Oui tu as raison, le determinant ne peut certes pas etre 30!!
Pour la matrice X dont tu as mentionne, l'inverse deviendrait
(1/a+b+c+d) [d, -b; -c,a) ou
1+1=0
0+0=0
1+0=1
0+1=1
Mais ca cause toujours des problemes parceque l'inverse ne peut avoir des valeurs binaires negatives.. Donc, le probleme reste quand meme..
C'est quoi le Z/2Z?? En effet, je travaille dessus pour ma these, qui est en anglais... Certains termes m'echappent.. :-) J'utilise le X-OR pour la multiplication des codes binaires..
Finalement, le champs Galois marche pas mal, mais il faut s'assurer que la matrice est carree plus inversible...
Oui tu as raison, le determinant ne peut certes pas etre 30!!
Pour la matrice X dont tu as mentionne, l'inverse deviendrait
(1/a+b+c+d) [d, -b; -c,a) ou
1+1=0
0+0=0
1+0=1
0+1=1
Mais ca cause toujours des problemes parceque l'inverse ne peut avoir des valeurs binaires negatives.. Donc, le probleme reste quand meme..
C'est quoi le Z/2Z?? En effet, je travaille dessus pour ma these, qui est en anglais... Certains termes m'echappent.. :-) J'utilise le X-OR pour la multiplication des codes binaires..
Finalement, le champs Galois marche pas mal, mais il faut s'assurer que la matrice est carree plus inversible...