Post Reply 
(48G 49 50g) Stirling and Stirling-Bernoulli Transforms
03-30-2019, 01:40 PM
Post: #1
(48G 49 50g) Stirling and Stirling-Bernoulli Transforms
First, the Stirling transform, also known as the Stirling S2 transform. More information here and here.

Code:

\<< DUP SIZE \-> a n
  \<< a HEAD { 1 } 2. n
    FOR k 0 SWAP + 2.
      \<< NSUB R\->I * +
      \>> DOSUBS 1 + a 1. k SUB OVER * \GSLIST SWAP
    NEXT DROP n \->LIST
  \>>
\>>

Next the inverse Stirling transform, also known as the Stirling S1 transform:

Code:

\<< DUP SIZE \-> b n
  \<< b HEAD { 1 } 1 n 1. - R\->I
    FOR k 0 SWAP + 2.
      \<< k * -
      \>> DOSUBS 1 + b 1 k 1 + SUB OVER * \GSLIST SWAP
    NEXT DROP n \->LIST
  \>>
\>>



Next, the Stirling-Bernoulli transform. While this transform is defined in terms of products of Stirling numbers and factorials, the program uses an algorithm described in this paper which is about three times as fast.

Code:

\<< DUP SIZE \-> n
  \<< DUP HEAD SWAP 2. n
    START 2.
      \<< - NSUB R\->I * EVAL
      \>> DOSUBS DUP HEAD SWAP
    NEXT DROP n \->LIST
  \>>
\>>

Finally, the inverse Stirling-Bernoulli transform, similar to the program above.

Code:

\<< DUP SIZE 1. - R\->I \-> n
  \<< DUP HEAD SWAP 1 n
    FOR k 2.
      \<< k / - EVAL
      \>> DOSUBS DUP HEAD SWAP
    NEXT DROP n 1 + \->LIST
  \>>
\>>

The EVAL commands inside the program arguments for DOSUBS are required because the terms of sequences returned by these programs may not be integers.

All of these programs will work on the 48G as long as the I->R commands are removed. The EVAL commands and decimal points following integers can also be removed. However, the results may not be accurate for some sequences due to the 12-digit limit of the 48G.
Find all posts by this user
Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)