Ah, thanks for the explanation! I updated the above gist to use symbolic recurrences: https://gist.github.com/rwbogl/06dab1e3b9935b292354b240e1807e75
How does this look? Related, this implementation doesn't play nicely with sequences not of "finite degree." For example, the Bell numbers (http://mathworld.wolfram.com/BellNumber.html). They have a recurrence that uses all previous Bell numbers, but I'm not sure how to substitute these values with, say, a summation index. On Monday, August 27, 2018 at 6:44:35 PM UTC-4, Aaron Meurer wrote: > > If I understood your code correctly, "evaluation" is a Python function > that returns s_i, s_{i+1}, ..., s_{j} from the previous terms s_k, > ..., s_{i-1}. It would be better to allow this formula to be > represented as a SymPy expression. You'll need another parameter to > specify the variables. This can easily be turned back into a function > using Lambda, but going from Python function to SymPy expression isn't > always possible. > > Aaron Meurer > > On Mon, Aug 27, 2018 at 4:38 PM, Robert Dougherty-Bliss > <[email protected] <javascript:>> wrote: > > Can you explain what you mean by symbolically? I know that there are > various > > classes for operations on sequences in series.sequences, but I feel like > you > > mean something else. (I'm not very familiar with SymPy internals other > than > > the "architecture" section of the contributor's guide.) > > > > On Monday, August 27, 2018 at 5:27:23 PM UTC-4, Aaron Meurer wrote: > >> > >> That looks like a good start. I would try to represent the sequence > >> symbolically instead of via a function so that it can be manipulated. > >> > >> Aaron Meurer > >> > >> On Mon, Aug 27, 2018 at 2:48 PM, Robert Dougherty-Bliss > >> <[email protected]> wrote: > >> > The new recurrences submodule isn't quite what I had in mind. If I'm > >> > reading > >> > it right, it expands a C-finite recurrence into a linear combination > of > >> > the > >> > initial values. This is good, but not a fully-fledged class. (I would > >> > like > >> > for this and related features to be a method of such a class.) > >> > > >> > My proof of concept of this idea looks like this: > >> > https://gist.github.com/rwbogl/06dab1e3b9935b292354b240e1807e75 > >> > > >> > I'm not sure that SeqBase itself could be modified for recursive > >> > sequences > >> > without losing generality. > >> > > >> > On Monday, August 27, 2018 at 2:50:50 PM UTC-4, Aaron Meurer wrote: > >> >> > >> >> There has been some work on recurrences, if you search the issue > >> >> tracker and pull request list for "recurrence" you can find some of > >> >> it. I'm not aware of any work along the lines of what you are > >> >> suggesting. > >> >> > >> >> Regarding the evaluation of recurrences, there has been some work in > >> >> the new sympy.discrete.recurrences submodule. > >> >> > >> >> Making SeqBase support recursive sequences sounds like a good idea. > >> >> One would need to make sure that all the methods work properly when > >> >> the sequence is recursive. > >> >> > >> >> Aaron Meurer > >> >> > >> >> On Sun, Aug 26, 2018 at 1:02 PM, Robert Dougherty-Bliss > >> >> <[email protected]> wrote: > >> >> > I have recently been working with linear recurrence relations with > >> >> > constant > >> >> > and / or polynomial coefficients w.r.t. the index. (These are > called > >> >> > C-finite and P-recursive sequences, respectively.) These sequences > >> >> > have > >> >> > some > >> >> > nice properties, such as easy closed-form expressions in the > C-finite > >> >> > case > >> >> > from Binet's formula. Ultimately, I would like to do things in the > >> >> > vein > >> >> > of > >> >> > Doron Zeilberger's GuessHolo package for P-recursive sequences, as > >> >> > described > >> >> > in this paper. > >> >> > > >> >> > Has anyone looked into creating a subclass of SeqBase (or > something > >> >> > more > >> >> > appropriate) for recursive sequences? Perhaps specifically for > >> >> > C-finite > >> >> > and > >> >> > P-recursive sequences? It seems like this would be convenient in > >> >> > general. > >> >> > For instance, every sequence implements a method to guess a > C-finite > >> >> > sequence that it might be (find_linear_recurrence()), but then > just > >> >> > returns > >> >> > a list of coefficients rather than a complete sequence object. > >> >> > Outside > >> >> > of > >> >> > C-finite sequences, memoization could be baked in to make the > >> >> > evaluation > >> >> > of > >> >> > less-trivial recursive sequences nicer. > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups > >> >> > "sympy" group. > >> >> > To unsubscribe from this group and stop receiving emails from it, > >> >> > send > >> >> > an > >> >> > email to [email protected]. > >> >> > To post to this group, send email to [email protected]. > >> >> > Visit this group at https://groups.google.com/group/sympy. > >> >> > To view this discussion on the web visit > >> >> > > >> >> > > >> >> > > https://groups.google.com/d/msgid/sympy/d8c5f383-ee72-4c9a-b9a9-4c18fb91f8dd%40googlegroups.com. > > > >> >> > For more options, visit https://groups.google.com/d/optout. > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "sympy" group. > >> > To unsubscribe from this group and stop receiving emails from it, > send > >> > an > >> > email to [email protected]. > >> > To post to this group, send email to [email protected]. > >> > Visit this group at https://groups.google.com/group/sympy. > >> > To view this discussion on the web visit > >> > > >> > > https://groups.google.com/d/msgid/sympy/9f96e0fc-e82a-4a28-b45a-a06cb462ac92%40googlegroups.com. > > > >> > > >> > For more options, visit https://groups.google.com/d/optout. > > > > -- > > You received this message because you are subscribed to the Google > Groups > > "sympy" group. > > To unsubscribe from this group and stop receiving emails from it, send > an > > email to [email protected] <javascript:>. > > To post to this group, send email to [email protected] > <javascript:>. > > Visit this group at https://groups.google.com/group/sympy. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/sympy/981fcc48-bc17-403c-91b5-bce094dd3f33%40googlegroups.com. > > > > > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/f1932cd4-c6ea-4463-8f46-d30f8807dcbc%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
