(48G/50g) Binomial Transform, Difference Table  Printable Version + HP Forums (https://www.hpmuseum.org/forum) + Forum: HP Software Libraries (/forum10.html) + Forum: General Software Library (/forum13.html) + Thread: (48G/50g) Binomial Transform, Difference Table (/thread12217.html) 
(48G/50g) Binomial Transform, Difference Table  John Keith  01172019 09:56 PM Difference tables and the binomial transform are powerful methods for analyzing integer sequences and their underlying logic. See also Conway and Guy, "The Book of Numbers", chapter 3. Difference tables can be easily created using the \GDLIST (DeltaLIST) command on many HP calculators. Given a list of integers on level 1, the following program returns a difference table as a list of lists: Code:
A simple modification of the program above will return the inverse binomial transform of the list on level 1: Code:
Modifying the above program by inserting NEG after \GDLIST will produce the variation described by Thomas Klemm in this post. And finally another modification returns the binomial transform, the inverse of the function of the program above: Code:
Unlike \GDLIST, the two programs above do not shorten the list. If a list of integers is transformed by one program followed by the other, the original list will return unchanged. ...And one more useful variation, called "inverse summation" in this paper. Code:
This is the exact inverse of the cumulative or partial sum, and does not shorten the list. Edited 9/20/2019 to add NEWOB to binomial transform, inverse binomial transform, and inverse summation programs. This simple addition allows the programs to process much larger lists and makes the programs run somewhat faster. RE: (48G/50g) Binomial Transform, Difference Table  Thomas Klemm  01182019 05:53 AM (01172019 09:56 PM)John Keith Wrote: A simple modification of the program above will return the inverse binomial transform of the list on level 1: This can be used to find an explicit formula for a polynomial sequence given only the first couple of values. From the older thread Solving a Recursive Sequence in Sequence App: { 0 1 4 10 20 35 56 } → { 0 1 2 1 0 0 0 } Thus: \(a_n=0\binom{n}{0}+1\binom{n}{1}+2\binom{n}{2}+1\binom{n}{3}\) Cheers Thomas RE: (48G/50g) Binomial Transform, Difference Table  Thomas Klemm  01182019 08:14 AM (01172019 09:56 PM)John Keith Wrote: With START and NEXT you could instead use: Code: \<< 2. s Cheers Thomas RE: (48G/50g) Binomial Transform, Difference Table  John Keith  01182019 07:39 PM (01182019 08:14 AM)Thomas Klemm Wrote:(01172019 09:56 PM)John Keith Wrote: You are correct of course. I have pointed that out to others at times myself. I shall correct the oversight. RE: (48G/50g) Binomial Transform, Difference Table  John Keith  01182019 08:01 PM (01182019 05:53 AM)Thomas Klemm Wrote: This can be used to find an explicit formula for a polynomial sequence given only the first couple of values. Thanks, Thomas. I know there is a connection here to polynomials and generating functions but this is mostly above my current level of knowledge. RE: (48G/50g) Binomial Transform, Difference Table  Thomas Klemm  01182019 08:50 PM That's just this formula for the inverse binomial transform from the linked Wikipedia article: \(a_n=\sum_{k=0}^n {n\choose k} t_k\) In the given example it leads to: \(\begin{align*} a_n&=0\binom{n}{0}+1\binom{n}{1}+2\binom{n}{2}+1\binom{n}{3}\\ &= 0+1\frac{n}{1}+2\frac{n(n1)}{2}+1\frac{n(n1)(n2)}{6}\\ &=n+ n(n1)+\frac{n(n1)(n2)}{6}\\ &=\frac{n(n+1)(n+2)}{6} \end{align*}\) This is in accordance with A000292. Cheers Thomas RE: (48G/50g) Binomial Transform, Difference Table  John Keith  01182019 09:44 PM Thanks again for the explanation. The difference table from your post in the other thread (11212014 10:52 PM)Thomas Klemm Wrote: For polynomial sequences you can apply the forward difference operator \(\Delta\) consecutively until you get just 0s. illustrates another analytic method and another useful list processing function. As one can see, each row above the fourth row is the cumulative sum of the row below. In a sense, the cumulative sum is the "inverse" of the forward difference which transforms each row into the row below. The cumulative sum (sometimes called the partial sums) is available in several programming languages cumSum on the Prime, accumulate in Python, etc. There is no such builtin command on the HP 50 but using the GoferLists library it can be implemented as such: Code:
It is also worth noting that the methods under discussion here are most effective for sequences based on polynomials. There are many other types of sequences for which these methods have little or no use. RE: (48G/50g) Binomial Transform, Difference Table  John Keith  05272019 09:07 PM Following on from the last two posts, a much faster binomial transform program for sequences defined by simple polynomials. Sequences defined by an nth degree polynomial are binomial transforms of a sequence beginning with n+1 terms followed by an arbitrary number of zeros. For instance, A000292, the tetrahedral numbers, is the binomial transform of { 1 3 3 1 0 0 0... }. The following program requires a list of the nonzero terms on level 2 and a number on level 1 which is the number of terms to return. For example, with { 1 3 3 1 } on level 2 and 12 on level 1, the program will return a list of the first 12 tetrahedral numbers. Code:
This program is HP 50g only since it uses commands from the external libraries ListExt and GoferLists. The following version is compatible with the HP48G. It is longer and slower than the HP 50 version but still reasonably fast. Code:
