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
  • $\begingroup$ See Collect $\endgroup$ Commented Jul 26, 2017 at 22:01

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$ Commented 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$ Commented 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$ Commented 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$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.