# Functions for Polynomials # ----------------------------------------------------------------------------------------------------------------------------- # # for a symmetric function 'f' in 'n' variabels 'DV' of the polynomial ring 'PR' # generate the representation for the 'n' elementary symmetric polynomials def symmetric_reduction(f, SV, DV, SymR, PR, n): e = SymmetricFunctions(PR).elementary() SE = [PR(e([i+1]).expand(n)) for i in range(n)] s = SymR(0) fs = recursive_symmetric_reduction([f, s], SE, SV, DV, SymR, PR, n) return(fs[1]) def recursive_symmetric_reduction(fs, SE, SV, DV, SymR, PR, n): if fs[0] == 0: return(fs) else: f = PR(fs[0]) s = fs[1] lm = f.monomials()[0] lc = f.coefficients()[0] lt = lm.exponents()[0] f = f - lc*mul([(SE[i]**(lt[i] - lt[i+1]) if i != n - 1 else SE[i]**(lt[i])) for i in range(n)]) s = s + SymR(lc*mul([SV[i]**(lt[i] - lt[i+1]) if i != n - 1 else SV[i]**(lt[i]) for i in range(n)])) return(recursive_symmetric_reduction([f, s], SE, SV, DV, SymR, PR, n)) # ----------------------------------------------------------------------------------------------------------------------------- #