test logique de deux matrices identiques

Utilisation à l'épreuve de modélisation de l'agrégation de mathématiques

Modérateur : xcasadmin

Denizou
Messages : 61
Inscription : mer. juin 13, 2012 7:23 am

test logique de deux matrices identiques

Message par Denizou » mer. nov. 28, 2012 4:56 pm

Bonjour,
je souhaitais savoir s'il y avait une astuce pour effectuer un test logique permettant de savoir si deux matrices étaient identiques ou non.
J'ai écrit un programme naïf qui le fait et suffit pour la taille des matrices que j'utilise.
Ceci dit A==B renvoie 0 même lorsque A=B
Pourquoi Xcas n'arrive pas à comparer deux matrices ?
Merci

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: test logique de deux matrices identiques

Message par parisse » mer. nov. 28, 2012 5:14 pm

Vous avez un exemple qui ne marche pas?
Il peut y avoir inégalité si A et B n'ont pas le même sous-type (on ne le voit malheureusement pas mais certaines matrices ont un sous-type non nul). On peut changer le sous-type avec convert, et donc par exemple tester si
convert(A,0)==convert(B,0)
Sinon, un moyen de tester (si les matrices sont a coefficients numériques), c'est de faire l1norm(A-B).

Denizou
Messages : 61
Inscription : mer. juin 13, 2012 7:23 am

Re: test logique de deux matrices identiques

Message par Denizou » ven. nov. 30, 2012 8:52 am

L'exemple que j'avais en tête était le suivant :
A matrice nulle 3x3
B:=J(0,3)
et je voulais tester B^3=0
Pourriez vous m'expliquer ce qu'est le sous-type d'une matrice et quel est l'apport de convert(A,0) ?
Merci

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: test logique de deux matrices identiques

Message par parisse » ven. nov. 30, 2012 9:33 am

En fait c'est le sous-type d'un vecteur/liste. Il n'y a pas a proprement parler de type specifique pour les matrices, ce sont des listes de listes, les vecteurs sont codes en interne par des listes, les polynomes a 1 variable aussi, et les sequences (les listes sans crochets qui se concatenent avec une virgule) aussi. Pour les differencier en interne lorsqu'il peut y avoir plusieurs facons d'interpreter une fonction (par exemple * ne se fait pas de la meme facon pour des polynomes, des vecteurs ou ca peut etre un produit scalaire, ou des matrices), on utilise un champ qui est le champ subtype, que l'on voit a l'affichage pour certains subtype (par exemple les polynomes en 1 variable). convert() permet de changer le subtype d'un vecteur.

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: test logique de deux matrices identiques

Message par frederic han » ven. nov. 30, 2012 1:20 pm

On le voit mieux sous giac que sous xcas:

22>> A:=matrix([[0]])
matrix[[0]]
23>> B:=[[0]]
[[0]]
24>> A==B
0
25>> A^1
matrix[[0]]
26>> A^2
[[0]]
27>> A^2==B
1
30>> J:=matrix(3,3,(u,v)->if u+1=v then 1 else 0 fi)
matrix[[0,1,0],[0,0,1],[0,0,0]]
31>> J^3
[[0,0,0],[0,0,0],[0,0,0]]
33>> convert(J,0)
[[0,1,0],[0,0,1],[0,0,0]]

Ce qui me perturbe c'est la conversion matrix vers liste de liste lors d'une multiplication ou une puissance differente de 1.

Frederic

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: test logique de deux matrices identiques

Message par parisse » ven. nov. 30, 2012 2:58 pm

En fait ce sont toutes les fonctions matricielles dont il faudrait vérifier que la sortie est de subtype _MATRIX__VECT. Dans un premier temps, il est sans doute plus simple de rajouter un cas particulier pour == pour ignorer le subtype lorsque l'un est 0 et l'autre _MATRIX__VECT.

Denizou
Messages : 61
Inscription : mer. juin 13, 2012 7:23 am

Re: test logique de deux matrices identiques

Message par Denizou » ven. nov. 30, 2012 5:43 pm

Merci pour tous ces renseignements

Répondre