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
- References:
- Forcing surds into the numerator
- From: "Tony King" <mathstutoring@ntlworld.com>
- Forcing surds into the numerator