3 ; ***************************************************************
5 ; * MANIPULATIONS DE FONCTIONS SYMETRIQUES *
6 ; * (version01: Commonlisp pour Maxima) *
8 ; * ---------------------- *
11 ; * (Mathe'matiques Effectives, De'veloppements Informatiques, *
12 ; * Calculs et Ingenierie, Syste`mes) *
13 ; * LITP (Equipe Calcul Formel) *
14 ; * Universite' Paris 6, *
15 ; * 4 place Jussieu, 75252 Paris cedex 05. *
16 ; * e-mail : avb@sysal.ibp.fr *
17 ; ***************************************************************
19 ;========================================================================= ;
21 (macsyma-module arite
)
24 ; cette fonction permet de passer d'une fonction puissance d'une
25 ; resolvante en p variables
26 ; a une fonction puissance en n variables gra^ce au the'ore`me de l'arite'
27 ; il faut rajouter un coefficient binomial a chaque partition
28 ; On suppose que les fonctions puissances sont DONNEES SUR LA BASE
29 ; DES FORMES MONOMIALES DE MANIERE PARTITIONNEE DANS LA LISTE $puissances
33 ((lambda ()) ((mlist) $degre $arite $puissances
)
34 ((mprog) (($operation
)) ((arite_init) $degre $arite $puissances
)))
36 (add2lnc '(($arite
) $degre $arite $puissances
) $functions
)
38 ; Ici le remplacement se re'alise physiquement
40 (mdefprop $arite_physique
41 ((lambda ()) ((mlist) $degre $arite $puissances
)
42 ((mprog) (($operation
)) ((arite_physique_init) $degre $arite $puissances
)))
44 (add2lnc '(($arite_physique
) $degre $arite $puissances
) $functions
)
47 (defun arite_init (degre arite $puissances
)
49 (mapcar #'(lambda ($pui
)
51 (n_complete_pui degre arite $pui
)))
55 (defun arite_physique_init (degre arite $puissances
)
56 (mapc #'(lambda ($pui
) (complete_pui_physique degre arite $pui
))
60 (defun complete_pui_physique (n p $puissance_resolvante
)
61 (mapc #'(lambda ($part
)
62 ; la longueur de la partition n'est pas en tete : (lg coeff . I)
63 (let ((lg (longueur (cddr $part
))))
68 (cdr $puissance_resolvante
)))
69 ; Ceci seulement pour des coefficients non numeriques :
70 ; ($mult_sym (car part)
76 ; il serait astucieux d'utiliser les rplaca. Pour cela il faut
77 ; garder en memoire bin(n-lg,p-lg), et le retirer de $puif apres
78 ; avoir evalue' en les fonction puissance. Ainsi on perdrait en temps
79 ; mais on gagnerai toute la longueur de $puif en espace.
80 ; attention, il existe une fonction complete_pui dans resolvante
82 (defun n_complete_pui (n p $puissance_resolvante
)
83 (mapcar #'(lambda ($part
) ; part=(part)(1) comme representation
84 (let ((lg (longueur (cddr $part
))))
86 ($mult_sym
(cadr $part
)
90 (cdr $puissance_resolvante
)))