Elementarize:= proc(Poly,Vars) ####################################################################### # # This procedure converts a polynomial which is symmetric in the variables # Vars into a polynomial in the elementary smmmetric polynomials. # ####################################################################### local Temp,EPoly,Eterm,TERM,e,E, DEG,ii,j,VR,m,S,A,i,term: with(Groebner): ################################################ # Makes the elementary symetric polynomials in Vars # for m from 1 to nops(Vars) do S:=combinat[choose](nops(Vars),m): e.m:=0: for A in S do term:=1: for i in A do term:=term*Vars[i]: od: e.m:=e.m+term od: od: ############################### Temp:=sort(eval(Poly),Vars); EPoly:=0: VR:=[Vars[1]]: for i from 2 to nops(Vars) do VR:=[Vars[i],VR[]]: od: while not(Temp=0) do Eterm:=leadcoeff(Temp,plex(Vars[])); TERM:=leadterm(Temp,plex(Vars[])); while not(TERM=1) do DEG:=0: ii:=0: while (DEG=0) do ii:=ii+1; DEG:= degree(TERM,VR[ii]); od: Eterm:=Eterm*(E.(nops(Vars)+1-ii))^DEG: for j from ii to nops(Vars) do TERM:=TERM/(VR[j]^DEG): od: od: EPoly:= EPoly + eval(Eterm): for i from 1 to nops(Vars) do Eterm := subs(E.i=e.i,Eterm): od: Temp:= simplify(Temp - Eterm); od: EPoly end: