Rationalizing denominators
Rationalizing denominators
Rationalizing expressions
Rationalizing expressions
In[]:=
rationalizeSqrtDenominator//ClearAll;rationalizeSqrtDenominator[x_]:=Module[{num,den,factors,conjugates},{num,den}=NumeratorDenominator[x];factors=GroupBy[FactorList[den],FreeQ[First@#,Power[_,Rational[1,2]]]&&IntegerQ[Last@#]&];num/=Times@@Power@@@factors[True];(*nosqrts*)conjugates=Replace[factors[False],(*yessqrts*){{r:Power[_,Rational[1,2]],n_}:>{r,n},{y_+r:Power[_,Rational[1,2]],n_}:>{y-r,n}},1];conjugates=Times@@Power@@@conjugates;num*=conjugates;Together@Expand[num]/Simplify[conjugates*Times@@Power@@@factors[False]]];
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},{num,den}=NumeratorDenominator[x];factors=GroupBy[FactorList[den],FreeQ[First@#,Power[_,Rational[1,2]]]&&IntegerQ[Last@#]&];(*num/=Times@@Power@@@factors[True];(*nosqrts*)*)conjugates=Replace[factors[False],(*yessqrts*){{r:Power[_,Rational[1,2]],n_}:>{r,n},{y_+r:Power[_,Rational[1,2]],n_}:>{y-r,n}},1];conjugates=Times@@Power@@@conjugates;num*=conjugates;numbox=MakeBoxes[#,StandardForm]&[numFN[num]];denbox=MakeBoxes[#,StandardForm]&[denFN[(Times@@Power@@@factors[True])*conjugates*Times@@Power@@@factors[False]]];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