MathGroup Archive 2010

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

Search the Archive

Re: Simplifying complicated expressions

  • To: mathgroup at
  • Subject: [mg110217] Re: Simplifying complicated expressions
  • From: David Bailey <dave at>
  • Date: Wed, 9 Jun 2010 07:18:56 -0400 (EDT)
  • References: <hufu1o$eel$>

On 06/06/10 11:42, David Park wrote:
> "The normal
> /. and ->  substitutions and patterns are not adequate for this."
> That sounds like a completely unfounded statement so why don't you
> demonstrate it?
> David Park
> djmpark at
> From: S. B. Gray [mailto:stevebg at ROADRUNNER.COM]
> Suppose I  have a long complex expression in which terms like
> (x^2+y^3-x^2y^2+Sqrt[z3+y2]) (for a simple example) appear many times
> along with various powers and the reciprocals of it, etc. To make the
> expression comprehensible and to make the computation faster, I would
> like to substitute say "f1xyz" for it everywhere it appears. The normal
> /. and ->  substitutions and patterns are not adequate for this. Of
> course at evaluation time I want to compute f1xyz only once and not have
> the final formula revert to the original variables. How do I prevent that?
> Also a welcome addition to Mathematica would be the ability to find these
> repeated expressions automatically and put them in, because doing it
> manually is very error-prone and slow.
> Tips will be appreciated!
> Steve Gray
In[10]:= x^2 + y^3 + b - x^2 y^2 + Sqrt[z3 + y2] +
   Sqrt[x^2 + y^3 - x^2 y^2 + Sqrt[z3 + y2]] //.
  x^2 + y^3 - x^2 y^2 + Sqrt[z3 + y2] -> flxyz

Out[10]= b + Sqrt[flxyz] + flxyz

Notice that Mathematica is not fooled by the fact that the 'b' term is 
embedded in one of the expressions that need to be replaced. Notice also 
that I used //. to obtain complete replacement. I was a little surprised 
that this was necessary, but the idea of //. (ReplaceAllRepeated) is 
that it looks again at subexpressions that have been changed.

Extracting common sub expressions from a larger expression is a fairly 
tricky problem in general to do automatically, but you can get a fair 
way with /. and //. .

The safest way to do this is to select the relevant subexpression using 
repeated clicking (or Control-.) so that you pick up a whole, valid 
expression, and then copy/paste it to the other side of the replacement 

David Bailey

  • Prev by Date: Re: Programatically creating delayed assignment
  • Next by Date: Re: SendMail under Mac OS X
  • Previous by thread: Re: Simplifying complicated expressions
  • Next by thread: Re: Simplifying complicated expressions