# displaying coefficients of two variable polynomials on a plane

Is there a way to arrange the coefficients of a multivariable polynomial in a specific way? For example, given

a+bx+cx^2+dy+exy in ZZ[x,y],


I want to see something similar to

d e
a b c.

edit retag close merge delete

To show verbatim code (e.g. sage code), you should indent the corresponding block with 4 space. You can to this by clicking on th 101010 button in the editor.

( 2021-11-01 11:46:37 +0200 )edit

Sort by » oldest newest most voted

First, you should define the polynomial ring so that you can define the polynomial:

sage: R.<x,y> = ZZ[]
sage: R
Multivariate Polynomial Ring in x, y over Integer Ring


Then, you can define your polynomial:

sage: P = 3+4*x+8*x^2+7*y+2*x*y
sage: P
8*x^2 + 2*x*y + 4*x + 7*y + 3


A handy way to get the coefficients and exponents of the polynomial is by using the dict method:

sage: d = P.dict()
sage: d
{(2, 0): 8, (1, 1): 2, (1, 0): 4, (0, 1): 7, (0, 0): 3}
sage: list(d.items())
[((2, 0), 8), ((1, 1), 2), ((1, 0), 4), ((0, 1), 7), ((0, 0), 3)]


Now, you can start from an empty graphics and add the text elements one by one:

sage: G = Graphics()
sage: for (x,y),t in d.items():
....:     G += text(t, (x, y))


Then, you can see your plot:

sage: G


You can also tune your plot, e.g. by removing the axes:

sage: G.show(axes=False)
Launched png viewer for Graphics object consisting of 5 graphics primitives

more

Here is a function

def matrice_2d(self, variables=None):
"""
EXAMPLES::

sage: x, y = PolynomialRing(QQ,['x', 'y']).gens()
sage: matrice_2d(x**2+x*y+y**3)
[1 0 0]
[0 0 0]
[0 1 0]
[0 0 1]

sage: x, y, z = PolynomialRing(QQ,['x','y','z']).gens()
sage: matrice_2d(x**2+z*x*y+z*y**3+z*x,[y,z])
[  x   x   0   1]
[x^2   0   0   0]
sage: matrice_2d(x**2+z*x*y+z*y**3+z*x,[x,z])
[  y^3 y + 1     0]
[    0     0     1]
"""
if variables is None:
ring = self.parent().base_ring()
x, y = self.parent().gens()
ix = 0
iy = 1
else:
x, y = variables
ring = self.parent()
toutes_vars = x.parent().gens()
ix = toutes_vars.index(x)
iy = toutes_vars.index(y)
support = self.exponents()
minx = min(u[ix] for u in support)
maxx = max(u[ix] for u in support)
miny = min(u[iy] for u in support)
maxy = max(u[iy] for u in support)
mat = matrix(ring, maxy - miny + 1, maxx - minx + 1)
for u in support:
ex = u[ix]
ey = u[iy]
i, j = (maxy - ey, ex - minx)
mat[i, j] = self.coefficient({x: ex, y: ey})
return mat

more