Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Collecting denominators together with Mathematica

  1. Aug 18, 2012 #1
    Hi all,
    I have a very simple issue, but can't get round of it.

    I have a long sum of rational functions, which is in the form for example

    [itex]\frac{n_{1}}{d_{1}}+\frac{n_{2}}{d_{1}}+\frac{n_{3}}{d_{1}}+\frac{n_{4}}{d_{1}}+\frac{n_{5}}{d_{2}}+\frac{n_{6}}{d_{2}}+\frac{n_{7}}{d_{1}\cdot d_{2}}+\frac{n_{8}}{d_{1}\cdot d_{2}}+\frac{n_{9}}{d_{1}\cdot d_{2}} [/itex]

    and I would like to put it in the form

    [itex]\frac{n_{1}+n_{2}+n_{3}+n_{4}}{d_{1}}+\frac{n_{5}+n_{6}}{d_{2}}+\frac{n_{7}+n_{8}+n_{9}}{d_{1}\cdot d_{2}} [/itex]

    If I use Factor or Simplify it would just put all over one single denominator [itex]d_{1}\cdot d_{2} [/itex], taking also so much time since my expression is huge.

    Any help?
  2. jcsd
  3. Aug 18, 2012 #2
    Figuring out how and why this works will be an educational experience.

    In[1]:= f=n1/d1+n2/d1+n3/d1+n4/d1+n5/d2+n6/d2+n7/(d1 d2)+n8/(d1 d2)+n9/(d1 d2);

    In[2]:= Plus@@Map[Together[Select[f,Function[x, Denominator[x]==#]]]&,Union[Map[ Denominator,List@@f]]]

    Out[2]= (n1 + n2 + n3 + n4)/d1 + (n5 + n6)/d2 + (n7 + n8 + n9)/(d1*d2)

    Be careful with that, just in case some oddball input breaks it.
  4. Aug 18, 2012 #3
    Wow, it worked. Miracles are hidden in mathematica, but I'll figure out why it worked.
    Thanks a lot.
  5. Aug 20, 2012 #4


    User Avatar
    Gold Member

    I always find ways to use Collect and get it to look right myself.

    Collect[f /. {1/(d1*d2) -> 1/d1d2}, {d1, d2, d1d2}] /. d1d2 -> d1 d2

    but the way above with mapping is much better and more robust.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook