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.

Reply via email to