# Efficient reduction to elementary symmetric polynomials

When using the resolvent method for solving polynomial equations, there's a step to express the coefficients of a polynomial (so-called resolvent) in elementary symmetric polynomials. For instance, for the general quintic one gets a resolvent of degree six, and one of its simpler coefficients is:

15*e[1, 1, 1, 1, 1, 1, 1, 1] - 160*e[2, 1, 1, 1, 1, 1, 1] + 528*e[2, 2, 1, 1, 1, 1] - 448*e[2, 2, 2, 1, 1] - 160*e[2, 2, 2, 2] + 336*e[3, 1, 1, 1, 1, 1] - 2208*e[3, 2, 1, 1, 1] + 2752*e[3, 2, 2, 1] + 2368*e[3, 3, 1, 1] - 3328*e[3, 3, 2] - 96*e[4, 1, 1, 1, 1] + 512*e[4, 2, 1, 1] + 2304*e[4, 2, 2] - 8960*e[4, 3, 1] + 17920*e[4, 4] - 1136*e[5, 1, 1, 1] + 5456*e[5, 2, 1] - 14144*e[5, 3] + 2736*e[6, 1, 1] - 6464*e[6, 2] + 1248*e[7, 1] + 1664*e[8]


The problem is that the reduction of the more complicated coefficients takes quite long even for this small degree polynomial. There are, however, two special properties of my polynomial that I think could be utilized here:

• My input polynomial is in the depressed form, meaning that $e_1$ is 0. Therefore I can ignore all terms where $e_1$ appears.
• I know that I'm working with symmetric expressions of 5 roots, therefore I can also ignore all terms with $e_i$ for $i > 5$.

Is there any way how to utilize those properties to help Sage simplify the computation? I'm using the from_polynomial function from the SymmetricFunctions class.

edit retag close merge delete

Sort by ยป oldest newest most voted

You can use the function like

def myreduce(f):
return f.parent()._from_dict( {d:c for d,c in f if d[0]<=5 and d[-1]>=2} )


then myreduce(f), where f is your polynomial, gives

-160*e[2, 2, 2, 2] - 3328*e[3, 3, 2] + 2304*e[4, 2, 2] + 17920*e[4, 4] - 14144*e[5, 3]


more

I wasn't asking how to reduce the expression in elementary symmetric polynomials, but rather how to speed up the computation of SymmetricFunctions.from_polynomial given the special conditions I have. That is my input is some polynomial in the roots (which I know is symmetric) and I want to express it in $e_i$. But I guess there really isn't a way other than writing the reduction algorithm myself.

( 2024-02-19 18:59:00 +0200 )edit

It's unclear what is your set up. If you work with symmetric expressions of 5 roots only, how do you get $e_i$ with $i>5$ in the result of from_polynomial? In general you can reduce your polynomial in the ideal generated by polynomials like $e_1$ (known to be zero) before converting to a symmetric one.

( 2024-02-19 20:46:37 +0200 )edit

If you work with symmetric expressions of 5 roots only, how do you get ei with i>5 in the result of from_polynomial

The same as in your question you linked: My polynomial is of higher degree than the number of variables (which in my case is the hypothetical roots of a (different) polynomial to be solved)

( 2024-02-19 22:18:17 +0200 )edit

you can reduce your polynomial in the ideal generated by polynomials like e1 (known to be zero) before converting to a symmetric one.

Yeah, that's what I tried at first but the reduce operation breaks the symmetry (quite naturally). E.g. (a^2 + b^2 + c^2 + d^2).reduce([a+b+c+d]) is no longer symmetric because the a is eliminated by the division algorithm,

( 2024-02-19 22:35:50 +0200 )edit

I do not follow. (a^2 + b^2 + c^2 + d^2).reduce([a+b+c+d])is symmetric in the remaining three variables. E.g. see https://sagecell.sagemath.org/?q=jxrjub

( 2024-02-20 02:36:44 +0200 )edit