06/15/2011, 03:18 PM
(This post was last modified: 06/15/2011, 08:40 PM by sheldonison.)

(06/15/2011, 07:43 AM)mike3 Wrote: Hi.

I've been trying to build my own program in Pari/GP to run the Kneser algorithm for tetration, but I can't seem to get it to work so well. The goal is to ultimately be able to generalize it to merge complex bases and bases less than , especially the legendary bases and .

Hey Mike,

Take a look at my recent post, which has some useful details, and a nice picture.

The first thing I notice is that your "step 2" is trying to compute the coefficients for theta, via the Fourier integral at the real axis, from -1 to zero. Theta(z) has a really nasty singularity at integer coefficient. Analytic Fourier analysis works really great with very minimal number of terms if you're generating the Fourier analysis of an analytic function, but the closer to the singularity you are, the more of a problem you have. As noted in the post above, I got around this by computing the integral at imag(z)=0.12i. I actually computed theta(z) from -0.5+0.12i to +0.5+0.12i, because that was centered very close to the middle of my sexp(z) approximation, where it was most accurate. 0.12i is far enough away from the singularity that the theta(z) function is very well behaved, and requires minimal terms in the Fourier analysis. fyi, my sexp(z) function is sampled in a unit circle around z=0. But the price you pay is that theta(z) now only converges for imag(z)>=0.12i. I went through many many iterations about how to deal with that, originally using a discreet Cauchy sampling, before I got to the current implementation, that splices together the Kneser/Riemann approximation with log(z)/exp(z), from the previous iterations sexp(z) approximation, which works really nicely. So that would be a change to your step (3) for your Cauchy integral.

If you do all of that, you should get about 4-5 bits precision improvement per iteration loop, with far fewer sampling points and terms in the theta(z) mapping. You can double that to about 8-9 bits precision per loop iteration, by adding some stuff to your step (4), normalize the taylor series, doing something I called renormalization to smooth out the function so that sexp(0.5+0.12i)=B^sexp(-0.5+0.12i), which makes the theta(z) Fourier integral behave better, since it is sampling a continuous function.

As far as the algorithm goes, it was originally designed to handle the Kneser mapping with its inherent singularity for . For some pairs of complex fixed point merger scenarios, where one of the fixed point is attracting, it may not make sense do the merger near the slog singularity, in which case none of the advice in this post is necessary, since the two Fourier series should have excellent convergence on their own, and the sexp intermediary is unnecessary. Eventually, I may support the complex base case where both fixed points are repelling in my Kneser.gp code.

Hope that helps.

- Sheldon