Re: Workaround for an unexpected behavior of Sum
- To: mathgroup at smc.vnet.net
- Subject: [mg91067] Re: [mg91036] Workaround for an unexpected behavior of Sum
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Tue, 5 Aug 2008 04:02:15 -0400 (EDT)
- References: <200808040723.DAA13823@smc.vnet.net>
I don't understand what you consider to be the advantage of your approach over the (to my mind) much simpler: j = 7; Module[{j}, Sum[g[j], {j, 1, n}]] Sum[g[j$679], {j$679, 1, n}] Andrzej Kozlowski On 4 Aug 2008, at 09:23, Jose Luis Gomez wrote: > Workaround for an unexpected behavior of Sum > > > > Let me describe the problem, before describing the solution > (workaround) > that I found. > > > > First: Next calculation works fine for me: > > > > j = 7; > > > > Sum[j^2, {j, 1, n}] > > > > Mathematica gave the answer I was expecting (n*(1 + n)*(1 + 2*n))/6, > It > means the global j and the dummy index j are actually different That > is > o.k., that is what I was expecting > > > > HOWEVER Next calculation gives an unexpected answer: > > > > Clear[f]; > > > > j = 7; > > > > Sum[f[j], {j, 1, n}] > > > > Now Mathematica answers n*f[7]. That is NOT what I was expecting > > > > I was expecting that Mathematica will return the Sum unevaluated, > Sum[f[j], > {j, 1, n}], and also with j unevaluated, so that the global j and > the dummy > index j remain different. > > > > NOW MY WORKAROUND FOR THIS "PROBLEM": AUTOMATICALLY CREATE A NEW > DUMMY INDEX > IF THERE EXISTS A VARIABLE WITH THE SAME NAME AS THE DUMMY INDEX. > Evaluate > this in your Mathematica session: > > > > Unprotect[Sum]; > > Sum[sumando_, before___, {dummyindex_, rest___}, after___] := > > ReleaseHold[ > > Hold[Sum[sumando, before, {dummyindex, rest}, after]] /. > > HoldPattern[dummyindex] :> > > Evaluate[ > > Unique[ToString[Unevaluated[dummyindex]]]]] /; > > (dummyindex =!= Unevaluated[dummyindex]); Protect[Sum]; > > > > Now, after the evaluation of the previous code, Mathematica behaves > the way > I was expecting: > > > > Clear[f]; > > > > j = 7; > > > > Sum[f[j], {j, 1, n}] > > > > This time Mathematica answers Sum[f[j1],{j1,1,n}]. > > The price we have to pay is that the dummy index was renamed. > > But it is a DUMMY INDEX, it can have any name. > > And the code makes the new name totally new, thanks to the Unique[] > command. > > AFAIK this code does Not affect the answers of Sum in other cases. > > > > I hope this simple solution is somehow useful. > > Notice that the command Integrate has a similar (in my opinion odd) > behavior, mixing dummy integration variables with global variables > when the > definite integral cannot be immediately performed. > > > > Best regards! > > > > Jose Luis Gomez-Munoz > > > > Mexico
- Follow-Ups:
- RE: Re: Workaround for an unexpected behavior of Sum
- From: "Jose Luis Gomez" <jose.luis.gomez@itesm.mx>
- RE: Re: Workaround for an unexpected behavior of Sum
- References:
- Workaround for an unexpected behavior of Sum
- From: "Jose Luis Gomez" <jose.luis.gomez@itesm.mx>
- Workaround for an unexpected behavior of Sum