Ask Your Question

Revision history [back]

Given

sage: R.<a_1,a_2,a_3,a_4,a_5,a_6,b_1,b_2,b_3,b_4,b_5,b_6,x,y> = PolynomialRing(QQ)
sage: f = a_1*x^2 + a_2*x*y + a_3*y^2 + a_4*x + a_5*y + a_6  + b_1*x^2 + b_2*x*y + b_3*y^2 + b_4*x + b_5*y + b_6

You can do:

sage: S = QQ['a_1,a_2,a_3,a_4,a_5,a_6,b_1,b_2,b_3,b_4,b_5,b_6']['x,y']; S
Multivariate Polynomial Ring in x, y over Multivariate Polynomial Ring in a_1, a_2, a_3, a_4, a_5, a_6, b_1, b_2, b_3, b_4, b_5, b_6 over Rational Field
sage: f_of_xy = S(f); f_of_xy
(a_1 + b_1)*x^2 + (a_2 + b_2)*x*y + (a_3 + b_3)*y^2 + (a_4 + b_4)*x + (a_5 + b_5)*y + a_6 + b_6
sage: f_of_xy.monomial_coefficient(S(x^2))
a_1 + b_1
sage: f_of_xy.monomials()
[x^2, x*y, y^2, x, y, 1]
sage: f_of_xy.coefficients()
[a_1 + b_1, a_2 + b_2, a_3 + b_3, a_4 + b_4, a_5 + b_5, a_6 + b_6]

Or without leaving the original ring, something like this:

coeffs = {}
for m, c in f.dict().items():
    m_xy = x^m[12]*y^m[13]
    m_rest = prod(b^e for (b, e) in zip(R.gens()[:-2], m[:-2]))
    if m_xy in coeffs:
        coeffs[m_xy] += c * m_rest
    else:
        coeffs[m_xy] = c * m_rest
coeffs

Result:

{x^2: a_1 + b_1,
 x*y: a_2 + b_2,
 y^2: a_3 + b_3,
 x: a_4 + b_4,
 y: a_5 + b_5,
 1: a_6 + b_6}