The question is, do we want Sum to automatically combine like that? If not, then I would add it as a different method than __sub__.
Aaron Meurer On Thu, Aug 30, 2012 at 8:51 AM, Chris Smith <smi...@gmail.com> wrote: > On Thu, Aug 30, 2012 at 8:02 PM, Saurabh Jha <saurabh.j...@gmail.com> wrote: >> Hi, >> >> In the course of implementing kauers algorithm I wanted to implement a >> function that can take as input a term like summation(f(x), (x, 1, k)) and >> outputs the f(x+1) that is the difference between (f(x), (x, 1, k + 1)) and >> (f(x), (x, 1, k)). Instead, it just returns "summation(f(x), (x, 1, k + 1) - >> summation(f(x), (x, 1, k)" I thought of just returning f(x + 1) directly but >> it will not work for nested sums. Is there any known way in sympy to deal >> with this problem? With this difficulty resolved, the implementation of the >> complete kauers algorithm will be done. >> > > A __sub__ method needs to be defined for Sum. Something like this can > get you started: > > > ``` > def __sub__(self, other): > if not isinstance(other, Sum): > raise ValueError > if self.variables == other.variables and \ > self.function == other.function and \ > self.limits[0][1] == other.limits[0][1]: > x, _, s = self.limits[0] > _, _, o = other.limits[0] > dif = s - o > if dif.is_Number: > if dif is S.One: > return self.function.subs(x, s) > elif dif > 0: > return Sum(self.function, (x, o + 1, o + dif)) > raise NotImplementedError > > ``` > > ``` >>>> from sympy import * >>>> var('x') > x >>>> >>>> f=Function('f') >>>> Sum(f(x),(x, 1, x + 1)) - Sum(f(x),(x, 1, x)) > f(x + 1) >>>> Sum(f(x),(x, 1, x + 3)) - Sum(f(x),(x, 1, x)) > Sum(f(x), (x, x + 1, x + 3)) >>>> Sum(f(x),(x, 1, x + 3)) - Sum(f(x),(x, 1, x+1)) > Sum(f(x), (x, x + 2, x + 3)) >>>> Sum(f(x),(x, 1, x + 3)) - Sum(f(x),(x, 1, x+2)) > f(x + 3) >>>> > ``` > Then you think about what __add__ might be...whether Number or only > Integer should be handled...what to do if the lower limits are not the > same or if diff is negative, etc... > > /c > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to sympy@googlegroups.com. > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sympy@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.