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