# Force Convert a Polynomial Ring into Multivariate Polynomial

I have the following code

xi = var('xi')
eta = var('eta')
P = 3*eta  - 1
Pr = P.polynomial(QQ)
Pr.coefficients(sparse=False)


which gives the output

[-1,3]


I would like to get the output in terms of both xi and eta that is, I want the output to be [-1,0,3]. How to force that? The reason I ask this is because my P is actually a mode in list of polyomials and generally function of both xi and eta and for different modes, either one or the other variable might not be there in the expression at all, and I want a general way to get the coefficients in a list corresponding to the coefficients of the terms 1,xi,eta,xi^2,xi *eta, eta^2 and so on.

edit retag close merge delete

Sort by » oldest newest most voted

If possible, avoid using symbolic variables (with var).

Instead, define a polynomial ring, and work there.

To get the coefficients in a multivariate polynomial ring, use list.

This will give you a list of pairs (c, m) where c is a coefficient and m is a monomial.

Here is an example, to give you an idea.

sage: R.<xi, eta> = PolynomialRing(QQ)
sage: P = 3*eta  - 1
sage: Q = 5 * eta * xi - 7 * eta^2 + 2 * xi^3 - 1
sage: list(P)
[(3, eta), (-1, 1)]
sage: list(Q)
[(2, xi^3), (5, xi*eta), (-7, eta^2), (-1, 1)]

more