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[1]:= Last[PolynomialReduce[a + b, {c - (a + b)}, {a, b, c}]]
Out[1]= c
In[2]:= Last[PolynomialReduce[a + b + c, {c - (a + b)}, {a, b, c}]]
Out[2]= 2c
In[3]:= Last[PolynomialReduce[-2 a - 2 b, {c - (a + b)}, {a, b, c}]]
Out[3]= -2c
In[4]:= Last[PolynomialReduce[c - a - b, {c - (a + b)}, {a, b, c}]]
Out[4]= 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[5]:= Last[PolynomialReduce[c - a, {c - (a + b)}, {a, c, b}]]
Out[5]= 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
____________________________________________________________________