Re: Re: How to declare Integers?
- To: mathgroup at smc.vnet.net
- Subject: [mg13072] Re: [mg13013] Re: How to declare Integers?
- From: BobHanlon at aol.com
- Date: Sat, 4 Jul 1998 16:45:11 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Tri, There are some problems with your definitions, specifically: Cos[m_ * Pi] /; IntegerQ[m] = 1; Sin[m_ * Pi + x_] /; IntegerQ[m] = Sin[x]; Cos[m_ * Pi + x_] /; IntegerQ[m] = Cos[x]; The correct definitions follow: Unprotect[Sin, Cos]; Sin[m_ * Pi + x_:0] /; IntegerQ[m] && EvenQ[m] := Sin[x]; Sin[m_ * Pi + x_:0] /; IntegerQ[m] && OddQ[m] := -Sin[x]; Sin[m_ * Pi + x_:0] /; IntegerQ[m] := (-1)^m * Sin[x]; Cos[m_ * Pi + x_:0] /; IntegerQ[m] && EvenQ[m] := Cos[x]; Cos[m_ * Pi + x_:0] /; IntegerQ[m] && OddQ[m] := -Cos[x]; Cos[m_ * Pi + x_:0] /; IntegerQ[m] := (-1)^m * Cos[x]; Cos[m_ * Pi/2 + x_:0] /; IntegerQ[m] && EvenQ[m] := (-1)^(m/2) * Cos[x]; Cos[m_ * Pi/2 + x_:0] /; IntegerQ[m] && OddQ[m] := I * (-1)^(m/2) * Sin[x]; Sin[m_ * Pi/2 + x_:0] /; IntegerQ[m] && EvenQ[m] := (-1)^(m/2) * Sin[x]; Sin[m_ * Pi/2 + x_:0] /; IntegerQ[m] && OddQ[m] := -I * (-1)^(m/2) * Cos[x]; Protect[Sin, Cos]; defineEven[n_Symbol] := Module[{}, n/: IntegerQ[n] = True; n/: EvenQ[n] = True; n/: OddQ[n] = False; n/: (-1)^n = 1;] defineOdd[n_Symbol] := Module[{}, n/: IntegerQ[n] = True; n/: OddQ[n] = True; n/: EvenQ[n] = False; n/: (-1)^n = -1;] Unprotect[IntegerQ]; IntegerQ[m_?IntegerQ + n_?IntegerQ] = True; IntegerQ[m_?IntegerQ * n_?IntegerQ] = True; IntegerQ[(m_?IntegerQ)^(n_ /; IntegerQ[n] && (Positive[n] || NonNegative[n]))] = True; Protect[IntegerQ]; n /: IntegerQ[n] = True; n /: Positive[n] = True; m /: IntegerQ[m] = True; k /: IntegerQ[k] = True; k /: NonNegative[k] = True; {IntegerQ[m+n], IntegerQ[m-n], IntegerQ[m*n], IntegerQ[m^n], IntegerQ[m^k], IntegerQ[n^m], IntegerQ[m*(n-1)*(n+1)]} {True,True,True,True,True,False,True} Clear[m]; m /: IntegerQ[m] = True; {Sin[m * Pi + x], Sin[m * Pi], Cos[m * Pi + x], Cos[m * Pi]} {(-1)^m*Sin[x], 0, (-1)^m*Cos[x], (-1)^m} Clear[m]; defineEven[m]; {Sin[m * Pi + x], Sin[m * Pi], Cos[m * Pi + x], Cos[m * Pi]} {Sin[x],0,Cos[x],1} Clear[m]; defineOdd[m]; {Sin[m * Pi + x], Sin[m * Pi], Cos[m * Pi + x], Cos[m * Pi]} {-Sin[x],0,-Cos[x],-1} Clear[m]; defineEven[m]; {Sin[m * Pi/2 + x], Sin[m * Pi/2], Cos[m * Pi/2 + x], Cos[m * Pi/2]} {(-1)^(m/2)*Sin[x], 0, (-1)^(m/2)*Cos[x], (-1)^(m/2)} Clear[m]; defineOdd[m]; {Sin[m * Pi/2 + x], Sin[m * Pi/2], Cos[m * Pi/2 + x], Cos[m * Pi/2]} {-I*(-1)^(m/2)*Cos[x], -I*(-1)^(m/2), I*(-1)^(m/2)*Sin[x], 0} Bob Hanlon In a message dated 6/30/98 4:48:43 AM, lvtri at cs.uwm.edu wrote: >Hi Carlos, it is interesting to try this: > >Unprotect[IntegerQ]; >IntegerQ[m_+n_]/;IntegerQ[m]&&IntegerQ[n]=True; >IntegerQ[m_*n_]/;IntegerQ[m]&&IntegerQ[n]=True; >IntegerQ[m_^n_]/;IntegerQ[m]&&IntegerQ[n]&&Positive[n]=True; >Unprotect[Sin,Cos]; >Sin[m_*Pi]/;IntegerQ[m]=0; >Cos[m_*Pi]/;IntegerQ[m]=1; >Sin[m_*Pi+x_]/;IntegerQ[m]=Sin[x]; >Cos[m_*Pi+x_]/;IntegerQ[m]=Cos[x]; > >This should work for any simple expressions for you. How ever, more will >be involved if you need to do things like this: > IntegerQ[m]=True; > IntegerQ[n*n]=True; >Should IntegerQ[m*(n-1)*(n+1)] return True ? I dont know how to do it >yet :) >Tri. > >Carlos Wexler wrote in message <6n4op4$njn at smc.vnet.net>... >> >>How can one declare m to be integer? There has to be a way! In Maple it >>is rather easy and the expected behavior is obtained. I cannot believe >>that it is not possible to accomplish the same in Mathematica as well. >> >>Thanks!!