3
$\begingroup$

I have a polynomial like this:

(a x + b c y + d z) (d x + e c y + g z)

I would like to rewrite it as something like this:

a d x^2 + b c^2 e y^2 + d g z^2 + (c (b d + a e)) x y + (d^2 + a g) x z + (c (d e + b g)) y z

i.e. keep all terms of different variables separate, collect all the coefficients for each term, and also simplify all the coefficients. How can we do this?

Collect gives a nested collection, so it is not what I want.

(i.e. it gives this:

a d x^2 + b c^2 e y^2 + (c d e + b c g) y z + d g z^2 + x ((b c d + a c e) y + (d^2 + a g) z)

where the last term is a nested one)

The closest I can find is

expr=(a x + b c y + d z) (d x + e c y + g z);

Plus @@ MonomialList[Expand[expr], {x, y, z}]

which collects all the coefficients but refuses to simplify them, i.e.

a d x^2 + (b c d + a c e) x y + b c^2 e y^2 + (d^2 + a g) x z + (c d e + b c g) y z + d g z^2.
$\endgroup$
1

4 Answers 4

4
$\begingroup$

Here is one possibility:

Activate @ Expand @ Collect[
    (a x+b c y+d z) (d x+e c y+g z),
    {x, y, z},
    Inactive[Simplify]
]

a d x^2 + c (b d + a e) x y + b c^2 e y^2 + (d^2 + a g) x z + c (d e + b g) y z + d g z^2

$\endgroup$
4
$\begingroup$
expr = (a x + b c y + d z) (d x + e c y + g z);

Simplify /@ Total @ MonomialList[Expand[expr], {x, y, z}]
Total[Simplify /@ MonomialList[Expand[expr], {x, y, z}]] 

or, a variation on Carl's approach (change the order of Collect and Expand)

Expand[Collect[(a x + b c y + d z) (d x + e c y + g z), {x, y, z}, foo]]/. foo -> Simplify

all give

a d x^2 + c (b d + a e) x y + b c^2 e y^2 + (d^2 + a g) x z + c (d e + b g) y z + d g z^2

$\endgroup$
0
$\begingroup$

It is unclear exactly what you seek, but this seems close:

Collect[Expand[(a x + b c y + d z) (d x + e c y + g z)], {x, y, z}]
$\endgroup$
3
  • $\begingroup$ Collect gives a nested collection, which is not what I want. $\endgroup$ Jul 26, 2017 at 22:06
  • $\begingroup$ When your question says you're seeking "something like this" it is manifest you're not being clear and precise. I don't think we can help you without a detailed, precise specification of what you seek. $\endgroup$ Jul 26, 2017 at 22:07
  • $\begingroup$ What I want is stated after the second highlighted expression, after "i.e.". I used "something like this" because the exact order of the terms and variables, as well as the parentheses around the common coefficient c, does not matter. $\endgroup$ Jul 26, 2017 at 22:13
0
$\begingroup$

Here are two approached using CoefficientRules and CoefficientList:

poly = (a x + b c y + d z) (d x + e c y + g z);

cr = Simplify@CoefficientRules[poly, {x, y, z}];
(x^#1 y^#2 z^#3 & @@@ #[[;; , 1]]).#[[;; , 2]] &@cr

cl = Simplify@CoefficientList[poly, {x, y, z}];
Total@Flatten[Array[x^#1 y^#2 z^#3 &, {3, 3, 3}, {0, 0, 0}] cl]

Both of which output

a d x^2 + c (b d + a e) x y + b c^2 e y^2 + (d^2 + a g) x z + c (d e + b g) y z + d g z^2

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.