RE: Sqrt problem - restated
- To: mathgroup@smc.vnet.net
- Subject: [mg12196] RE: [mg12164] Sqrt problem - restated
- From: Ersek_Ted%PAX1A@mr.nawcad.navy.mil
- Date: Fri, 1 May 1998 03:08:46 -0400
Paul Reiser wrote:
----------
| How do I get "2" out of this:
|
| Sqrt[a - b] Sqrt[a + b]
|1 + -----------------------
| 2 2
| Sqrt[a - b ]
|
|I'm starting to understand why Mathematica doesn't deal with this
|because of the multiple value of square root, but if I know everything
|under the square roots are positive, can I reduce this to 2 somehow
|without substitution? (substitution would be prohibitively tedious in
|my case)
|
|
Unfortunately Mathematica doesn't have this capability built-in (not yet
anyway). We can write a program to handle this case and many others.
Caution: I haven't done extensive testing on this program.
At the very least it should be interesting, and a good start to boot.
Very similar to my recent solution to Manual's question I define the
functions AssumedInterval, Assume, IntervalExpr, UseAssumptions. Then
I define the rules AssumptionRules, and SimplifyRules.
________________________________
In[10]:=
AssumedInterval[x_]:=x
In[11]:=
Assume[x_,Positive]/;(NumericQ[x]===False):=
(AssumedInterval[x]^=Interval[{$MinNumber^(1/20),Infinity}];)
In[12]:=
Assume[x_,Negative]/;(NumericQ[x]===False):=
(AssumedInterval[x]^=Interval[{-Infinity,-$MinNumber^(1/20)}];)
In[13]:=
IntervalExpr[expr_]:=With[
{temp=Map[AssumedInterval[#]&, expr,{-1}]},
If[TrueQ[FreeQ[temp,f_[_Interval..]]],temp, Indeterminate]]
In[14]:=
AssumptionRules={
Greater[a_,b_]:>With[{tempa=IntervalExpr[a],tempb=IntervalExpr[b]},
Which[Min[tempa]>Max[tempb],True,Max[tempa]<=Min[tempb],False, True,
Greater[a,b]]/;
(Head@tempa===Interval||Head@tempb===Interval)],
Less[a_,b_]:>With[{tempa=IntervalExpr[a],tempb=IntervalExpr[b]},
Which[Max[tempa]<Min[tempb],True,Min[tempa]>=Max[tempb],False, True,
Less[a,b]]/;
(Head@tempa===Interval||Head@tempb===Interval)],
Im[x_]:>0/;MatchQ[IntervalExpr[x],Interval[{_,_}]] };
In[15]:=
UseAssumptions[expr_]:=expr//.AssumptionRules
In[16]:=
SimplifyRules={
Sqrt[x_]*Sqrt[y_]:>Sqrt[x*y]/;
(Or@@UseAssumptions/@{x>0,y>0})&&
(And@@UseAssumptions/@{Im[x]==0,Im[y]==0}),
(x_^pwr_Rational)(y_^pwr_Rational):>(x*y)^pwr/;
Or@@UseAssumptions/@{x>0,y>0},
Sqrt[x_]:>Sqrt[Factor[x]],
(x_)^(pwr_Rational):>Factor[x]^pwr};
_________________________________
Now I state that (a) and (b) are Positive, and I get the simplification
you want.
Note: The simplification hold true when (a-b) is Negative.
In[17]:=
Assume[a,Positive];
Assume[b,Positive];
In[18]:=
1+Sqrt[a+b]Sqrt[a-b]/Sqrt[a^2-b^2]//.SimplifyRules
Out[18]=
2
_______________
Ted Ersek
PS
Paul, You work at NRL?
I work at NAWCAD PatuxentRiver, MD.