Re: dummy indices / variables
- To: mathgroup@smc.vnet.net
- Subject: [mg11197] Re: [mg11145] dummy indices / variables
- From: Ersek_Ted%PAX1A@mr.nawcad.navy.mil
- Date: Mon, 2 Mar 1998 23:10:51 -0500
Richard Easther wrote: ---------- | ........ coming up with a method to let Mathematica recognize (and then perform |simplifications upon) equivalent expressions with dummy indices. | |For instance, | | Sum[f[a],{a,1,m}] + Sum[f[b],{b,1,m}] // FullSimplify | |does not recognize that the two sums are identical, and misses what (to |a human being, at least!) is a trivial simplification. | Richard, Sorry if I offended you with my earlier post. Something like the lines below might solve much of your problem. I wrap the expression with Hold to prevent evaluation of the sums. Then I use InputForm so the result is easy to read via e-mail. In[1]:= expr=Hold[Sum[f[a],{a,1,m}] + Sum[f[b],{b,1,m}]+f[a+1]+f[b+1]]; The simple rule in the next line would work for the example you gave. After using Rule (->) to change the dummy variable, I release the hold. However, we run into trouble when (a) is used as a regular variable and also a dummy variable as in my example below. In[2]:= simple=ReleaseHold[expr/.a->b]; InputForm[simple] Out[2]//InputForm= 2*f[1 + b] + 2*Sum[f[b], {b, 1, m}] The code in the next line will work for the example I give, but it only changes the dummy variable of a sum of f[_] from 1 to m. Any other sum will not be effected. In[3]:= simple=ReleaseHold[expr/.Sum[f[x_],{x_,1,m}]:>Sum[f[a],{a,1,m}]]; InputForm[simple] Out[3]//InputForm= f[1 + a] + f[1 + b] + 2*Sum[f[a], {a, 1, m}] The next line is more versatile. It will change the dummy variable of a sum of any function over any range. In[4]:= simple=ReleaseHold[ expr/.Sum[fun_[x_],{x_,xmin_,xmax_}]:>Sum[fun[a],{a,xmin,xmax}]]; InputForm[simple] Out[4]//InputForm= f[1 + a] + f[1 + b] + 2*Sum[f[a], {a, 1, m}] Similar tricks can probably be used to make more simplifications you need. Ted Ersek