Rationalizing denominators
Rationalizing denominators
Rationalizing expressions
Rationalizing expressions
In[]:=
rationalizeSqrtDenominator//ClearAll;rationalizeSqrtDenominator[x_]:=Module[{num,den,factors,conjugates},factors=Join[<|False{{1,1}},True{{1,1}}|>,GroupBy[FactorList[x],Last@#≥0&]];conjugates=Replace[factors[False],(*yessqrts*){(*{r:Power[_,Rational[1,2]],n_Integer}{r,n},*){y_+r:Power[_,Rational[1,2]],n_Integer}{y-r,n},_Nothing},1];conjugates=Times@@Power@@@conjugates;num=(Times@@Power@@@factors[True])/conjugates;den=conjugates*Times@@Power@@@factors[False];Together@Expand[num]*Simplify[den]];
Examples
Examples
rationalizeSqrtDenominator[1/Identity[Pi^2Sqrt[8](3-Sqrt[27])]]
Out[]=
-
2
+6
24
2
π
rationalizeSqrtDenominator[Sin[Pi/12]]
Out[]=
1
4
2
+6
)rationalizeSqrtDenominator[1/Sqrt[8]](*fails*)
Out[]=
1
2
2
Rationalized output
Rationalized output
In[]:=
rationalizeSqrtDenominatorBoxes//ClearAll;rationalizeSqrtDenominatorBoxes[x_]:=rationalizeSqrtDenominatorBoxes[x,{Simplify,Simplify}];rationalizeSqrtDenominatorBoxes[x_,{numFN_,denFN_}]:=Module[{num,den,factors,conjugates,numbox,denbox},factors=Join[<|False{{1,1}},True{{1,1}}|>,GroupBy[FactorList[x],Last@#≥0&]];conjugates=Replace[factors[False],(*yessqrts*){(*{r:Power[_,Rational[1,2]],n_Integer}{r,n},*){y_+r:Power[_,Rational[1,2]],n_Integer}{y-r,n},_Nothing},1];conjugates=Times@@Power@@@conjugates;num=(Times@@Power@@@factors[True])/conjugates;den=conjugates*Times@@Power@@@factors[False];If[den<0,den=-den;num=-num];numbox=MakeBoxes[#,StandardForm]&[numFN[num]];If[den==1,numbox,denbox=MakeBoxes[#,StandardForm]&[denFN[1/den]];FractionBox[numbox,denbox]]];rationalizeSqrtDenominatorBoxes[x_,simpFN_]:=rationalizeSqrtDenominatorBoxes[x,{simpFN,simpFN}];
Examples
Examples
rationalizeSqrtDenominatorBoxes[1/Identity[Pi^2Sqrt[8](3-Sqrt[27])]]//RawBoxes
Out[]=
-
2
(1+3
)24
2
π
rationalizeSqrtDenominatorBoxes[Sin[Pi/12]]//RawBoxes
Out[]=
2
(-1+3
)4
rationalizeSqrtDenominatorBoxes[Sin[Pi/12],Expand]//RawBoxes
Out[]=
-
2
+6
4
rationalizeSqrtDenominatorBoxes[1/Sqrt[8]]//RawBoxes(*succeeds*)
Out[]=
2
4
%^2(*resultisnotnumeric*)
Out[]=
2
2
4
2
4
Out[]=
1
8
Bill's Examples
Bill's Examples
(rationalizeSqrtDenominatorBoxes[#,Expand]//RawBoxes)&/@{Sin[5π/12],Sin[π/12],1/(2Sqrt[2]),1/Sqrt[8],6/Sqrt[9],SinDegrees[36]}
Out[]=
,,,,2,
2
+6
4
-
2
+6
4
2
4
2
4
2(5-
5
)4
It's not clear what you want for sin(36º). There's no denominator in the form:
SinDegrees[36]
Out[]=
5
8
5
8