Re: How to declare Integers?
- To: mathgroup at smc.vnet.net
- Subject: [mg13010] Re: [mg12966] How to declare Integers?
- From: BobHanlon at aol.com
- Date: Tue, 30 Jun 1998 00:26:07 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Carlos, The issue is not with whether or not Mathematica knows whether m is an integer, since even after you told it that m is an integer it still did not know the integral. Obviously, it does not know the value of the integral for the general case of m being an integer. If you expect to encounter this integral frequently, tell it the answer. However, there are a number of special cases which you then would then want it to treat smartly: Unprotect[Integrate]; Integrate[Sin[(m_)?EvenQ*(x_)]/Sin[x_], {x_, 0, Pi}] := 0; Integrate[Sin[(m_)?OddQ*(x_)]/Sin[x_], {x_, 0, Pi}] := Pi /; Positive[m]||NonNegative[m]; Integrate[Sin[(m_)?OddQ*(x_)]/Sin[x_], {x_, 0, Pi}] := -Pi /; Negative[m]; Integrate[Sin[(m_)?OddQ*(x_)]/Sin[x_], {x_, 0, Pi}] := Sign[m]*Pi; Integrate[Sin[(m_)?IntegerQ*(x_)]/Sin[x_], {x_, 0, Pi}] := (1 - (-1)^m)/2*Pi /; Positive[m]||NonNegative[m]; Integrate[Sin[(m_)?IntegerQ*(x_)]/Sin[x_], {x_, 0, Pi}] := (-1 + (-1)^m)/2*Pi /; Negative[m]; Integrate[Sin[(m_)?IntegerQ*(x_)]/Sin[x_], {x_, 0, Pi}] := (1 - (-1)^m)/2*Sign[m]*Pi; Protect[Integrate]; n1/: IntegerQ[n1] = True; Integrate[Sin[n1*x]/Sin[x], {x, 0, Pi}] Table[%, {n1, -5, 5}] 1/2*(1 - (-1)^n1)*Pi*Sign[n1] {-Pi, 0, -Pi, 0, -Pi, 0, Pi, 0, Pi, 0, Pi} n2/: EvenQ[n2] = True; Integrate[Sin[n2*x]/Sin[x], {x, 0, Pi}] 0 n3/: OddQ[n3] = True; Integrate[Sin[n3*x]/Sin[x], {x, 0, Pi}] Pi*Sign[n3] n4/: OddQ[n4] = True; n4/: Positive[n4] = True; Integrate[Sin[n4*x]/Sin[x], {x, 0, Pi}] Pi n5/: OddQ[n5] = True; n5/: NonNegative[n5] = True; Integrate[Sin[n5*x]/Sin[x], {x, 0, Pi}] Pi n6/: OddQ[n6] = True; n6/: Negative[n6] = True; Integrate[Sin[n6*x]/Sin[x], {x, 0, Pi}] -Pi n7/: IntegerQ[n7] = True; n7/: Positive[n7] = True; Integrate[Sin[n7*x]/Sin[x], {x, 0, Pi}] 1/2*(1 - (-1)^n7)*Pi n8/: IntegerQ[n8] = True; n8/: Negative[n8] = True; Integrate[Sin[n8*x]/Sin[x], {x, 0, Pi}] 1/2*(-1 + (-1)^n8)*Pi n9/: IntegerQ[n9] = True; n9/: NonNegative[n9] = True; Integrate[Sin[n9*x]/Sin[x], {x, 0, Pi}] 1/2*(1 - (-1)^n9)*Pi I suspect this is why Mathematica does not handle all of the obvious special cases for its large number of functions. Bob Hanlon In a message dated 6/28/98 6:09:36 AM, wexler at einstein.phys.ufl.edu wrote: >How can one declare a variable to be integer in Mathematica? > >Let me just give an example: > > Integrate[Sin[m x]/Sin[x], {x,0,Pi}] > >is well behaved if one explicitly sets m=1,2,3,... BEFORE doing the >integral: > >In[1]:= Integrate[Sin[1 x]/Sin[x], {x,0,Pi}] Out[1]= Pi > >In[2]:= Integrate[Sin[2 x]/Sin[x], {x,0,Pi}] Out[2]= 0 > >but > >In[3]:= Integrate[Sin[m x]/Sin[x], {x,0,Pi}] Out[3]= Integrate::"idiv": > Integral of Csc[x] Sin[m x] does not converge on {0,Pi} > >Other examples include evaluation of Sin[m Pi], etc... > >I tried the following trick stated in the manual: > >In[4]:= m/: IntegerQ[m] = True >Out[4]= True > >but still Sin[m Pi] does not simplify to 0 nor does Mathematica figures >out that the integral above does converge in this case. > >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.