Page 1 sur 1

test logique de deux matrices identiques

Publié : mer. nov. 28, 2012 4:56 pm
par Denizou
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

Re: test logique de deux matrices identiques

Publié : mer. nov. 28, 2012 5:14 pm
par parisse
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).

Re: test logique de deux matrices identiques

Publié : ven. nov. 30, 2012 8:52 am
par Denizou
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

Re: test logique de deux matrices identiques

Publié : ven. nov. 30, 2012 9:33 am
par parisse
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.

Re: test logique de deux matrices identiques

Publié : ven. nov. 30, 2012 1:20 pm
par frederic han
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

Re: test logique de deux matrices identiques

Publié : ven. nov. 30, 2012 2:58 pm
par parisse
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.

Re: test logique de deux matrices identiques

Publié : ven. nov. 30, 2012 5:43 pm
par Denizou
Merci pour tous ces renseignements