RE: test positive
- To: mathgroup@smc.vnet.net
- Subject: [mg12193] RE: [mg12083] test positive
- From: Ersek_Ted%PAX1A@mr.nawcad.navy.mil
- Date: Fri, 1 May 1998 03:08:43 -0400
Manual wrote: ---------- |I want to test whether a function is always positive for a given set of |parameter values. | |For example, consider the trivial case: | |f=x*y | |Is there a way to test whether x*y is positive given that x is greater |than 0 and y is less than 0 or both x and y are greater than 0, etc., |or better yet to solve for the specific conditions that will yield |xy>0. | Mathematica doesn't have this capability built-in. We can write a program to do what you want. However, my program is limited by the capabilities of Mathematica's Interval arithmetic. (ie. Mathematica can't do SinIntegral[ Interval[{0.4, 5.8}] ] ). I defined functions, AssumedInterval, Assume, IntervalExpr, and UseAssumptions. I made a list of rules called AssumptionRules. ___________________________ 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)}]) (* I ran into trouble when I simply used $Min Number. *) 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)] }; (* Many other rules can be added to the list. *) In[15]:= UseAssumptions[expr_]:=expr//.AssumptionRules _____________________________ Now in the next line I define (x, y) to be positive, and use this fact in the lines that follow. In[16]:= Assume[x,Positive]; Assume[y,Positive]; In[17]:= x*y>0//UseAssumptions Out[17]= True In[18]:= x*y<-Pi//UseAssumptions Out[18]= False ---------------------------------- Ted Ersek