Page 1 sur 1

parties d'un ensemble

Publié : mar. mai 27, 2008 6:32 pm
par jmmeny
Y a-t-il un moyen simple avec xcas d'obtenir les parties d'un ensemble ( les parties de cardinal donné de cet ensemble) ?

merci

Publié : mer. mai 28, 2008 11:09 am
par parisse
Je ne vois pas de moyen simple.
Quelle est la taille n de l'ensemble de depart? Si ce n'est pas trop grand, on peut facilement programmer la recherche en cout 2^n. On parcourt tous les entiers entre 0 et 2^n-1 on les ecrit en base 2 avec convert(.,base,2) et on fait la somme des elements de la liste, si elle est egale a la taille souhaitee, on cree le sous-ensemble forme par les elements correspondants aux 1 de la liste, et on ajoute ce sous-ensemble a la liste des sous-ensembles de taille p.

Publié : mer. mai 28, 2008 6:38 pm
par jmmeny
Merci. J'essaie ça, ça devrait convenir tout à fait.

Publié : mer. mai 28, 2008 6:42 pm
par jmmeny
Mon pb était en fait de sortir la liste des solutions de systèmes
tels que
AX=B sur Z/2Z
avec
A:=[[1,1,0,1,0,0],[1,1,1,0,1,0],[0,1,1,0,0,1],
[1,0,0,1,1,0],[0,1,0,1,1,1],[0,0,1,0,1,1]]
et
B:=[1,1,1,1,1,1]
avec
M:=[[1,1,0,1,0,0,1],[1,1,1,0,1,0,1],[0,1,1,0,0,1,1],[1,0,0,1,1,0,1],[0,1,0,1,1,1,1],[0,0,1,0,1,1,1]]
rref(M%2).
puis
sol:=tran(Mr)[6];
et ajouter les éléments du noyau ker(M[0..5,0..5]%2)

Peut être y a-t-il plus efficace ...

Publié : mer. mai 28, 2008 7:49 pm
par parisse
oui, dans ce cas c'est plus simple que pour un ensemble fini sans structure.
Pour generer les elements d'un espace vectoriel de dimension n à partir de sa base sur Z/2Z, il suffit de décomposer les entiers de 0 à 2^n-1 en base 2 (avec convert(.,base,2)) ce qui génère tous les vecteurs de (Z/2Z)^n.
Ensuite on parcourt chaque vecteur de (Z/2Z)^n, pour chaque composante non nulle, on additionne le vecteur correspondant de la base du ker (et on additionne la solution particuliere).

Publié : jeu. mai 29, 2008 6:40 am
par parisse
on peut d'ailleurs construire les coefficients a la volee, sans utiliser convert, avec irem(.,2) et iquo(.,2)