Doesn't this call for some sort of Sum_simplify?

I don't like the idea of overriding __sub__. I do like the idea of looking
at an expression tree and seeing if it can be simplified. Is there a
mechanism in SymPy to write down these simplifications and have them
applied when you call simplify? I'm not very familiar with how simplify is
organized.

On Thu, Aug 30, 2012 at 11:43 AM, Aaron Meurer <asmeu...@gmail.com> wrote:

> 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.
>
>

-- 
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