8
$\begingroup$

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.

$\endgroup$

1 Answer 1

12
$\begingroup$

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

Edit

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.

$\endgroup$
2
  • $\begingroup$ 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? $\endgroup$ Commented Aug 21, 2015 at 10:56
  • $\begingroup$ Try to formulate your problem as a separate question, otherwise it is hard to guess what you are trying to do. $\endgroup$ Commented Aug 21, 2015 at 13:26

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.