# Multivariate polynomial coefficients including zeros

Dears,

I would like to get the coefficients of a multivariate polynomial including the zero coefficients (in their correct positions). I have found a similar answer as regards a polynomial f of two variables x,y

P.<x,y> = PolynomialRing(ZZ, 2, order='lex')
f=3*x^2*y^2+x*y+3


Then using the following code:

coeffs = []
for i in range(f.degree(x), -1, -1):
for j in range(f.degree(y), -1, -1):
coeffs.append(f.coefficient({x:i, y:j}))


The result is as expected: [3, ,0 , 0, 1, 0, 0, 0, 0, 3]

Now, I would like to extend this solution for a multivariate polynomial of n variables [xo,x1,...xn-1] The polynomial is defined with the following code: (Note: q=next_prime(10000))

A1 = [(', '.join('x%i'%i for i in [0.. n-1]))]; ### construct a suitable multivariate ring
V = var(A1[0])
x=vector(list(V))
P1=PolynomialRing(GF(q),V)


How can I do that? Any help will be much appreciated.

Regards, Natassa

edit retag close merge delete

A tip independent of your actual question: you can construct this polynomial ring in a cleaner way with

P1=PolynomialRing(GF(q),n,'x')


If you want the variables bound to symbols so that you can write x0^2+x1^2 etc. then you can use

P1.inject_variables()


or, if you want the variables as a tuple/list/whatever:

x=P1.gens()
x=vector(P1.gens())


etc.

( 2017-03-15 11:04:28 -0500 )edit

Sort by » oldest newest most voted

I guess your problem comes the iterated loops that you can not write one by one since you do ont know a priori how many loops there will be (it depends on the number of variables). To solve this issue, you can have a look at itertools.product:

sage: from itertools import product
sage: product?


Then you can do something like (i just give some hints about zip and dictionaries):

sage: for I in product(*[range(f.degree(v), -1, -1) for v in P.gens()]):
sage:     print I
sage:     print dict(zip(P.gens(),I))

more