       Re: Why doesn't this rule work?

• To: mathgroup at smc.vnet.net
• Subject: [mg32592] Re: Why doesn't this rule work?
• From: Paul Abbott <paul at physics.uwa.edu.au>
• Date: Thu, 31 Jan 2002 01:45:14 -0500 (EST)
• Organization: University of Western Australia
• References: <a2ghu1\$ki\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```James Jennings wrote:

> Suppose I want to simplify expressions linear in a, b, and c where a+b=c
> -- something of this sort.

Since your expressions are (linear) polynomials in a, b, and c, you can
use PolynomialReduce to do this sort of thing automatically:

In:= Last[PolynomialReduce[a + b, {c - (a + b)}, {a, b, c}]]
Out= c

In:= Last[PolynomialReduce[a + b + c, {c - (a + b)}, {a, b, c}]]
Out= 2c

In:= Last[PolynomialReduce[-2 a - 2 b, {c - (a + b)}, {a, b, c}]]
Out= -2c

In:= Last[PolynomialReduce[c - a - b, {c - (a + b)}, {a, b, c}]]
Out= 0

> I also want to apply rules based on c-a=b
>
> In[]:=   c-a /. n1_. c+n2_. a /; n1==-n2 -> n1  b
>
> Out[]=   b

The order of terms in the last (list) argument of PolynomialReduce
determines the elimination order

In:= Last[PolynomialReduce[c - a, {c - (a + b)}, {a, c, b}]]
Out= b

> Before someone suggests that I should just set c = a+b and be done with
> it, my actual problem involved 12 objects like a, b, and c, where 16
> distinct triplets add up like a+b=c. I'm looking for rules that will
> keep my expressions as short as possible, even if they aren't unique.

You simply add all the "zero identies" to the second argument of
PolynomialReduce.

Cheers,
Paul

>
> In[]:=   a+b /. a+b -> c
>
> Out[]=   c
>
> In[]:=   a+b+c /. a+b ->  c
>
> Out[]=   2 c
>
> With more complicated coefficients I can use:
>
> In[]:=   -2 a - 2 b /. n_. a+n_. b -> n  c
>
> Out[]=   -2 c
>
> In[]:=   -a-b+c /. n_. a+n_. b -> n  c
>
> Out[]=   0
>
> I also want to apply rules based on c-a=b
>
> In[]:=   c-a /. n1_. c+n2_. a /; n1==-n2 -> n1  b
>
> Out[]=   b
>
> The problem comes with I apply the above rule to longer expressions.
>
> In[]:=   c-a-b /.  n1_. c+n2_. a /; n1==-n2 -> n1  b
>
> Out[]=   -a-b+c
>
> Why didn't that work? I had thought that since Plus[] is Orderless, my
> rule ought to be applied to all pieces of my expression, but it doesn't
> appear to be.

--
____________________________________________________________________
Paul Abbott                                   Phone: +61-8-9380-2734
Department of Physics                           Fax: +61-8-9380-1014
The University of Western Australia      (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009                      mailto:paul at physics.uwa.edu.au
AUSTRALIA                            http://physics.uwa.edu.au/~paul

God IS a weakly left-handed dice player
____________________________________________________________________

```

• Prev by Date: Re: Genetic Algorithms
• Previous by thread: RE: Re: Why doesn't this rule work?
• Next by thread: How to separate imaginary unit inside an arbitrary function?