Re: Together, Apart, ? [2]
- To: mathgroup at smc.vnet.net
- Subject: [mg17042] Re: Together, Apart, ? [2]
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Wed, 14 Apr 1999 02:11:55 -0400
- References: <7ehj7k$nsb@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Here is simple direct version of together that is much faster than the one
in my previous posting - in general recursion is to be avoided .
Clear["`*"]
SimpleTogether[expr_Plus]:=
((Plus@@( # List@@expr))/ #)&[Times@@Union[Denominator/@List@@expr]]
SimpleTogether[expr_]:= expr
TESTS
expr=k/m+(a+b+c)/(c+d/g)+(e+f+g)/(g+h)+u/p+ v/p +q+1;
SimpleTogether[expr]
((c + d/g)*(g + h)*k*p + (c + d/g)*(e + f + g)*m*p +
(a + b + c)*(g + h)*m*p + (c + d/g)*(g + h)*m*p +
(c + d/g)*(g + h)*m*p*q + (c + d/g)*(g + h)*m*u +
(c + d/g)*(g + h)*m*v)/((c + d/g)*(g + h)*m*p)
SimpleTogether//@expr
((d + c*g)*(g + h)*k*p + (e + f + g)*(d + c*g)*m*p +
(a + b + c)*g*(g + h)*m*p +
(d + c*g)*(g + h)*m*p + (d + c*g)*(g + h)*m*p*q +
(d + c*g)*(g + h)*m*u + (d + c*g)*(g + h)*m*v)/
((d + c*g)*(g + h)*m*p)
Together[expr]
(d*g*k*p + c*g^2*k*p + d*h*k*p + c*g*h*k*p +
d*e*m*p + d*f*m*p + 2*d*g*m*p + c*e*g*m*p +
c*f*g*m*p + a*g^2*m*p + b*g^2*m*p + 3*c*g^2*m*p +
d*h*m*p + a*g*h*m*p + b*g*h*m*p + 2*c*g*h*m*p +
d*g*m*p*q + c*g^2*m*p*q + d*h*m*p*q +
c*g*h*m*p*q + d*g*m*u + c*g^2*m*u + d*h*m*u +
c*g*h*m*u + d*g*m*v + c*g^2*m*v + d*h*m*v +
c*g*h*m*v)/((d + c*g)*(g + h)*m*p)
TIMINGS
Do[SimpleTogether[expr],{10}]//Timing
{0.06 Second,Null}
Do[SimpleTogether//@expr,{10}]//Timing
{0.11 Second,Null}
Do[MyTogether[expr],{10}]//Timing
{0.33 Second,Null}
Do[MyTogether//@expr,{10}]//Timing
{0.44 Second,Null}
Do[Together[expr],{10}]//Timing
{0.6 Second,Null}
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565