6

I have an expression that I want Mathematica to fully expand without any simplification afterwards. I want the output to look like the following example.

(x+y)^2 ⇒ x^2+xy+yx+y^2

Could you help me to solve this problem?

J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
Parisa
  • 61
  • 1
  • 2

2 Answers2

10

Try

Expand[(x + y)^2] 

which will give you

$ x^2 + 2 x y + y^2$

Even ExpandAll[] won't separate the $"2 xy"$ into $"xy+yx"$. And this makes sense; what should it make of $"3xy"$? $"xy + yx + xy"$, or $"xy + yx +yx"$? And what about $"10 xy"$ (I don't want to think about $"10000 xy"$)?

J.M.'s solution

Distribute[(x + y) ** (x + y)] /. t_ ** t_ :> t^2  

will give you the $2 x y$ as separate terms, but has to use the symbol for non-commutative multiplication (for example, x and y may be operators):

$ x^2 + y^2 + x ** y + y** x $

and Mathematica won't interpret it as commutative multiplication. Replacing x and y with numerical values

x^2 + y^2 + x ** y + y ** x /. {x -> 2, y -> 3}

will yield

$13 + 2 ** 3 + 3 ** 2$

instead of

$ 25$

Eric Brown
  • 4,406
  • 1
  • 18
  • 36
stevenvh
  • 6,866
  • 5
  • 41
  • 64
3
Defer@*Plus @@ (If[SameQ[##], Times, CenterDot][##] & @@@ Tuples[{x, y}, 2])
% /. {x -> 3, y -> 4}

enter image description here

chyanog
  • 15,542
  • 3
  • 40
  • 78