Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2002
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

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
____________________________________________________________________


  • 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?