Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have an expression: $p=a\;b\; x + b^2\; y + a\;c\; z$. I want to substitute $a\;b=1$, $b^2 = 2$ and $a\;c = 4$ to obtain $p = x + 2y + 4z$.
How can I tell Mathematica to do that? I dont know how to start.

share|improve this question
up vote 11 down vote accepted

A reliable approach would use the third argument of Reduce as variables to eliminate (see Behavior of Reduce with variables as domain)

Reduce[{p == a b x + b^2 y + a c z, a b == 1, b^2 == 2, a c == 4}, {p}, {a, b, c}]
p == x + 2 y + 4 z

In the former editions of Mathematica (ver <= 4) Reduce used the third argument for eliminating another variables. It can be still used this way though it is not documented anymore, however its trace could be found in SystemOptions["ReduceOptions"].
If Reduce didn't work this way one would exploit Solve (it is still supposed to eliminate variables), e.g.:

Apply[ Equal, Solve[{p == a b x + b^2 y + a c z, a b == 1, b^2 == 2, a c == 4}, 
       {p}, {a, b, c}], {2}][[1, 1]]

or Eliminate:

Eliminate[{p == a b x + b^2 y + a c z, a b == 1, b^2 == 2, a c == 4}, 
          {a, b, c}] // Reverse

or even simply appropriate rules replacement (in general this approach cannot be used seamlessly though)

p == a b x + b^2 y + a c z /. {a b -> 1, b^2 -> 2, a c -> 4} // TraditionalForm

enter image description here


It would be reasonable to mention another two functions useful in similar tasks. Taking this polynomial identiclly equal to zero:

poly = p - a b x - b^2 y - a c z;

we can rewrite it in terms of another three polynomials which are also identically zeros by the assumptions:

{poly1, poly2, poly3} = {a b - 1, b^2 - 2, a c - 4};

thus we know that the resulting polynomial will be equal to zero as well:

Last @ PolynomialReduce[ poly, {poly1, poly2, poly3}, {a, b, c, p, x, y, z}] == 0
p - x - 2 y - 4 z == 0

similarily we can find a Groebner basis of polynomials { poly, poly1, poly2, poly3} eliminating unwanted variables {a, b, c}:

First @ GroebnerBasis[{ poly, poly1, poly2, poly3}, {x, y, z}, {a, b, c},
                       MonomialOrder -> EliminationOrder] == 0

These two methods are more useful when we want to find different representations of (polynomial) expressions in polynomial rings, thus we needn't assume that polynomials { poly, poly1, poly2, poly3} identically vanish.

share|improve this answer
Thank you for your answer. – minthao_2011 Feb 11 '14 at 15:50
I'm trying to do something similar without eliminating the variables, i.e., just replace certain polynomials in an expression, so that the result is more compact and easier to read. Is there any way to do this with Mathematica? – auxsvr Aug 21 '15 at 10:56
Try to formulate your problem as a separate question, otherwise it is hard to guess what you are trying to do. – Artes Aug 21 '15 at 13:26

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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