parties d'un ensemble

Utilisation de Xcas

Modérateur : xcasadmin

jmmeny
Messages : 36
Inscription : dim. févr. 03, 2008 8:41 pm

parties d'un ensemble

Message par jmmeny » mar. mai 27, 2008 6:32 pm

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

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

Message par parisse » mer. mai 28, 2008 11:09 am

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.

jmmeny
Messages : 36
Inscription : dim. févr. 03, 2008 8:41 pm

Message par jmmeny » mer. mai 28, 2008 6:38 pm

Merci. J'essaie ça, ça devrait convenir tout à fait.

jmmeny
Messages : 36
Inscription : dim. févr. 03, 2008 8:41 pm

Message par jmmeny » mer. mai 28, 2008 6:42 pm

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 ...

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

Message par parisse » mer. mai 28, 2008 7:49 pm

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).

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

Message par parisse » jeu. mai 29, 2008 6:40 am

on peut d'ailleurs construire les coefficients a la volee, sans utiliser convert, avec irem(.,2) et iquo(.,2)

Répondre