MathGroup Archive 2006

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

Search the Archive

Re: Forcing surds into the numerator

  • To: mathgroup at smc.vnet.net
  • Subject: [mg64674] Re: [mg64656] Forcing surds into the numerator
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Sun, 26 Feb 2006 05:07:56 -0500 (EST)
  • References: <200602250753.CAA13968@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

On 25 Feb 2006, at 08:53, Tony King wrote:

> Does anyone know how I can force Mathematica to display surds in the
> numerator of an expression, or a function that can be applied to do  
> the job?
>
> For example, FullSimplify[1/(3+Sqrt[2])] returns itself and not 1/7
> (3-root2)
>
> Similarly, Sin[Pi/12] returns (-1+root3)/(2root2) and not 1/4  
> (root6-root2)
>
> Many thanks
>
> Tony
>

I answered this question in 1999, so below I am just copying the  
functions I defined in that post without any further thinking about it.


You can do it with FullSimplify and a suitably chosen complexity  
function that will penalise the presence of radicals in the  
denominator. Here is such a function:

RationalizeDenominator1[expr_] :=

   FullSimplify[expr, ComplexityFunction ->
     (
       Count[#, _?
         (MatchQ[Denominator[#], Power[_, _Rational] _. + _.] &),
         {0, Infinity}
       ] + If[FreeQ[#, Root], 0, 1] &
     )
   ]

This will work on your first example:


RationalizeDenominator1[1/(3 + Sqrt[2])]


(1/7)*(3 - Sqrt[2])

but not quite on yours second

In[14]:=
RationalizeDenominator1[Sin[Pi/12]]

Out[14]=
(-1 + Sqrt[3])/(2*Sqrt[2])


To deal with such and more complicated cases I wrote a function that  
will remove radicals from the denominator. It has quite clumsy  
interface so one has to specify the root you want to remove but it is  
not difficult to make a function that will remove all radicals.  Here  
is the function:

RationalizeDenominator2[f_, a_] :=
   Module[{t,
      MinimalPoly}, MinimalPoly[x_, t_] := RootReduce[
       x][[1]][t]; MinimalPoly[Sqrt[b_], t_] := t^2 - b;
     Numerator[f]*
           PolynomialExtendedGCD[Denominator[f] /. {a -> t},
               MinimalPoly[a, t]][[2, 1]] /. t -> a // Expand]


To use it you have to specify which radical in the denominator you  
want move to the numerator:


RationalizeDenominator2[1/(3 + Sqrt[2]), Sqrt[2]]


3/7 - Sqrt[2]/7



RationalizeDenominator2[RationalizeDenominator2[Sin[Pi/12], Sqrt[3]],  
Sqrt[2]]


Sqrt[3/2]/2 - 1/(2*Sqrt[2])


with complicated expressions RationalizeDenominator1 and  
RationalizeDenominator2 will give you different answers:


expr = (3 - Sqrt[5])/(1 + 5^(1/7));


RationalizeDenominator1[expr]


(-(-3 + Sqrt[5]))*Root[6*#1^7 - 7*#1^6 + 21*#1^5 - 35*#1^4 + 35*#1^3  
- 21*#1^2 + 7*#1 -
      1 & , 1]


RationalizeDenominator2[expr, 5^(1/7)]


1/2 - (5*5^(1/14))/6 - 5^(1/7)/2 + (5*5^(3/14))/6 + 5^(2/7)/2 - (5*5^ 
(5/14))/6 -
   5^(3/7)/2 - Sqrt[5]/6 + 5^(4/7)/2 + 5^(9/14)/6 - 5^(5/7)/2 - 5^ 
(11/14)/6 +
   5^(6/7)/2 + 5^(13/14)/6


Note also, however, that Mathematica will always do this:


Sqrt[2]/2


1/Sqrt[2]

which means that no matter what you do if Mathematica encounters  
something like the above you will get square roots in the  
denominator. There is no way of preventing this without using Hold.


Andrzej Kozlowski






  • Prev by Date: Re: Sequence@@List
  • Next by Date: Re: Forcing surds into the numerator
  • Previous by thread: Forcing surds into the numerator
  • Next by thread: Re: Forcing surds into the numerator