Re [mg 7343] How to make Sqrt[a^2]/;(a>
- To: mathgroup at smc.vnet.net
- Subject: [mg7409] Re [mg 7343] How to make Sqrt[a^2]/;(a>
- From: Ersek_Ted%PAX1A at mr.nawcad.navy.mil
- Date: Fri, 30 May 1997 01:20:50 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
In [mg 7343] Carl needed to make Mma simplify Sqrt[a^2] to a
when "a" is a variable known to be Positive.
This was needed so he could make a power series and a limit come out right.
I am working on a nifty package that handles this. Part of my package is
shown below.
I tried to make my package completely correct mathematically speaking.
The many possible extensions to my package should be obvious.
Ted Ersek
----------------------------------------------------------------------------
---------------
In[1]:=
Assume[x_,Positive]/;(NumericQ[x]==False):= (
Positive[x]^=True;
Negative[x]^=False;
NonNegative[x]^=True;
NonPositive[x]^=False;
Im[x]^=0;
x > y_ /;(y<=0)^=True;
x >= y_ /;(y<=0)^=True;
x < y_ /;(y<=0)^=False;
x <= y_/;(y<=0)^=False;
x == y_/;(y<=0)^=False;)
ClearAssume[x_]:=(
x/:Positive[x]=. ;
x/:Negative[x]=. ;
x/:NonNegative[x]=. ;
x/:NonPositive[x]=. ;
x/:Im[x]=. ;
x/:HoldPattern[x>y_/; y<=0] =. ;
x/:HoldPattern[x>=y_/;y<=0 ] =. ;
x/:HoldPattern[x<y_/; y<=0 ]=. ;
x/:HoldPattern[x<=y_/;y<=0 ] =. ;
x/:HoldPattern[x==y_/;y<=0]=. ; )
Unprotect[Sqrt,Power ];
Sqrt[(x_)^(n_)]:=x^(n/2)/;(Positive[x]&&Im[n]==0);
Sqrt[(x_)^(n_)]:=x^(n/2)/;(Im[x]==0&&EvenQ[n/2]);
Sqrt[(x_)^(n_)]:=-x^(n/2)/;(Negative[x]&&OddQ[n/2]);
((x_)^a_)^b_:=x^(a b)/;(Positive[x]&&Im[a]==0&&Im[b]==0);
((x_)^a_)^b_:=-x^(a b)/;(Negative[x]&&EvenQ[a]&&OddQ[a b]);
Protect[Sqrt, Power ];
(*--------------------------------------------------------------------------
------*)
In[4]:= Assume[a,Positive]
(* Now that a is "assumed" Positive my package knows a lot about a. *)
In[5]:= {Positive[a], Negative[a], a>-4, a<=-Pi, a==-E}
Out[5]= {True,False,True,False,False}
(*--------------------------------------------------------------------------
------*)
(* The rules I added for Sqrt allow Sqrt[a^2] to be simplified. *)
In[6]:= Sqrt[a^2]
Out[6]= a
(*--------------------------------------------------------------------------
-------*)
(* Now that Mma can simplify Sqrt[a^2] it can do the Series and Limit
below. *)
In[7]:= Series[b^2/(a-Sqrt[a^2-b^2]), {b,0,2}]
Out[7]:= 2 a- b^2/(2 a) + O[b]^4
In[8]:= Limit[b^2/(a-Sqrt[a^2-b^2]), b->0]
Out[8]= 2 a
(*--------------------------------------------------------------------------
------*)
(* Now I Clear the assumptions about a, and all the assumptions are
removed. *)
In[9]:= ClearAssume[a]
In[10]:= {Positive[s],Negative[s],s>-4, s<=-Pi, s==-E}
Out[10]= {Positive[s],Negative[s],s>-4,s\[LessEqual]-\[Pi],s==-E}