MathGroup Archive 1999

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

Search the Archive

RE: Together, Apart, ?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg16981] RE: [mg16932] Together, Apart, ?
  • From: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
  • Date: Sat, 10 Apr 1999 02:13:25 -0400
  • Sender: owner-wri-mathgroup at wolfram.com

Greg Arnold wrote,
------------------------

I'm still trying to figure out a 'good' way to manipulate some huge
expressions (on the order of 10M leaves)?.  Based on recent suggestions,
I've been using Together instead of Simplify and this has helped
tremendously in many cases.  However, even Together often chugs away for
days on my computer, and I think I have a clue why... it boils down to the
following examples:

Together[(a+b)/(c+d)+(e+f)/(g+h)] // InputForm
Out[82]//InputForm=
(c*e + d*e + c*f + d*f + a*g + b*g + a*h + b*h)/
  ((c + d)*(g + h))

Apart[(a+b)*(e+f)*(g+h)/(c+d)+(e+f)/(g+h)]  //InputForm
Out[88]//InputForm=
((a + b)*(e + f)*g)/(c + d) + ((a + b)*(e + f)*h)/(c + d) + 
  (e + f)/(g + h)

These examples are a little hard to read without the pretty printing in
Mathematica.  However, the basic problem is that Mathematica has expanded
the numerator in Together.  I've also considered using Apart, but it also
can end up with more terms than are needed (partially expanded form).
Currently, I'm working with huge ratios of determinant expressions, and
expanding them out is a definite no-no.  I believe the functions can
generally be written as a ratio of polynomials and I'm trying to simplify
the expressions to check things such as if a substitution forces the
equation to zero and to take derivatives and integrals.  From what I can
tell, Together is the fastest code available for forming the ratio of
polynomials... does anybody know of code that does Together without
expanding the numerator?  I've thought about rewriting Together as a list of
rules, but I figured my code would be too simplistic and yet too complex to
be useful.  Any suggestions?  I also thought that Apart might work.  If it
gives me the simplest denominators, then I could multiply them all through
to form the 'together' expression.  Is Apart efficient for huge expressions?
Any suggestions on how to keep Apart from partially expanding the result?

Thanks in advance!

Greg


-------------------------
The function below should do what you want, but I don't know how fast it
will run on a large problem.  I can't see how Apart would do you much good.
If your huge expression is only a means to an end you might consider a
different approach.  You could try Interpolation or InterpolatingPolynomial
or if your function has poles you could use a ratio of
IntepolatingPolynomials.

In[1]:=
Together2[expr_]:=expr//.
  (
    (t1_/;Head[t1]=!=Plus)+
    (t2_/;Head[t2]=!=Plus)+t3_.
   ):>
  (
     Numerator[t1]*Denominator[t2]+
     Numerator[t2]*Denominator[t1]
   )/(Denominator[t1]Denominator[t2])+t3


In[2]:=
Together2[(a+b)/(c+d)+(e+f)/(g+h)]
Out[2]=
((c + d)*(e + f) + (a + b)*(g + h))/
  ((c + d)*(g + h))


In[3]:=
Together2[(a+b)/(c+d)+(e+f)/(g+h)+(u+v)/(x+y)+z]
Out[3]=
((c + d)*(g + h)*(u + v) + 
    ((c + d)*(e + f) + (a + b)*(g + h))*
     (x + y) + (c + d)*(g + h)*(x + y)*z)/
  ((c + d)*(g + h)*(x + y))


-----
Regards,
Ted Ersek


  • Prev by Date: ListDensityPlot[ ] and DensityGraphics
  • Next by Date: Re: Permutations & Computer capacity
  • Previous by thread: Together, Apart, ?
  • Next by thread: Re: Together, Apart, ?