Ask Your Question
0

What are these extra terms in symmetric polynomial calculations?

asked 2020-07-19 18:21:45 +0100

rain1 gravatar image

I am trying to calculate the discriminant of the cubic using symmetric polynomials, here is my attempt:

P = PolynomialRing(QQ, 'x', 3)
x = P.gens()
S = SymmetricFunctions(QQ)
e = SymmetricFunctions(QQ).e()

def nice_symmetric_poly(coeffs, u):
    v = var(coeffs)
    return sum(x[1]*product(v[i] for i in x[0]) for x in list(u))

d = (x[0]-x[1])*(x[0]-x[2])*(x[1]-x[2])
u = e.from_polynomial(d^2)
nice_symmetric_poly('a b c d e', u)

This gives me u:

e[2, 2, 1, 1] - 4*e[2, 2, 2] - 4*e[3, 1, 1, 1] + 18*e[3, 2, 1] - 27*e[3, 3] - 8*e[4, 1, 1] + 24*e[4, 2]

and the nice polynomial version:

b^2*c^2 - 4*b^3*d - 4*c^3 + 18*b*c*d - 8*b^2*e - 27*d^2 + 24*c*e

but I was expecting the result from here https://www.johndcook.com/blog/2019/0...

Δ = 18bcd – 4b³d + b²c² – 4c³ – 27d².

I don't understand why these "e" terms exist: - 8b^2e + 24ce

and why is there anything with a e[4] in it inside u.

Thank you for any insight into this problem.

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted
2

answered 2020-07-19 19:20:51 +0100

nbruin gravatar image

updated 2020-07-20 05:07:13 +0100

If you use u.expand(3) == d^2 (as mentioned in the documentation of from_polynomial) I get equality. With the same trick you can then see what e[4,2].expand(3) is supposed to mean and it seems to be 0. The same for e[4,1,1].expand(3). So, it seems that the routine is at least internally consistent. It shouldn't include 0-functions in its representations, though; that's just confusing.

I suspect what's happening: it's converting to symmetric functions through another basis (monomial basis, where the indexing is by a non-increasing exponent vector, taken to be the exponents of the leading monomial) and then it converts to the elementary basis in a way that's valid for symmetric functions in an arbitrary number of variables, at the cost of including loads of 0 terms for particular realizations (fair enough, because at this point the system doesn't know the number of variables that the symmetric function is in any more)

It looks like u.restrict_parts(3) culls the bits you're not interested in.

I've seen this before: in principle combinatorics and algebra mean the same thing when they talk about symmetric functions, but their motivating questions for studying them are so different that their notations and conventions diverge to the point of being incompatible.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2020-07-19 18:21:45 +0100

Seen: 489 times

Last updated: Jul 20 '20