Handling large iterated exponentials and their pullbacks
#2
So I've decided to recode my functions into Pari-GP. Sadly, this is still very primitive code, but nonetheless seems to get the job done in restricted cases.

I've attached two files here, which are the Schroder function and the Abel function respectively. To explain the math, follow the link in the previous post to the arxiv page.

The first function is the Schroder function, which I write as,

\(
\varphi_\lambda(w)\\
\)

Which satisfies the equation,

\(
\varphi_\lambda(e^{-\lambda}w) = \exp(\varphi_\lambda(w))\\
\)

This function tends to infinity at \( w=0 \) and has singularities at the points \( w = -e^{-\lambda j} \) for \( j\ge 1 \). The variable \( \lambda \) is restricted so \( \Re(\lambda) > 0 \). I've coded this function, rudimentarily, as the function \( \text{Sch_L(w,l,n,k)} \) where w is the same and \( \text{l} = \lambda \). The variable n is the first depth of iteration, and the variable k is the second depth of iteration. There's no real problem setting n very large; but about n =15, n=20, is sufficient accuracy. The variable k is more finicky. If you set this to values larger than 10 we're almost guaranteed to over flow. But setting it to about 10 produces about 12 digits of accuracy.

For example, here are some code snippets verifying the functional equation for about 10-12 digits.



Code:
exp(Sch_L(1+1*I,log(2),100,10))

%40 = 0.05510674309654904481102386681 - 1.050130227798316703527845033*I

Sch_L(0.5+0.5*I,log(2),100,10)

%41 = 0.05510674309655249618896068904 - 1.050130227798277994007491593*I

exp(Sch_L(1+I,log(2)+I,100,10))

%42 = -0.4244299033948726076538482291 + 0.1965660278912558591088438168*I

Sch_L(exp(-log(2)-I)*(1+I),log(2)+I,100,10)

%44 = -0.4244299033948266048629686497 + 0.1965660278914230800708608920*I

exp(Sch_L(2.1, 1+0.5*I, 100, 10))

%48 = -0.1983543337931354790254094135 + 0.5439856344355677623947164582*I

Sch_L(exp(-1-0.5*I)*2.1,1+0.5*I,100,10)

%49 = -0.1983543337931700823145109510 + 0.5439856344354902802955187393*I

The overflow errors, again, are inherent to the code and not the function itself. At some point Pari-GP doesn't like calculating 10 iterated logarithms, and there's nothing I can do :/. Trying to use built in Taylor series seems to malfunction for me; as its estimates are wildly off.

The second file attached deals with the Abel function, which is closer to the function we actually want. A primitive way to code this is to just make the substitution \( w = e^{-\lambda s} \); however I've attached a different code here, which does the recursive process using only the abel equation. This equates to the function,

\(
F_\lambda(s)
\)

which satisfies the functional equation,

\(
F_\lambda(s+1) = \exp(F_\lambda(s))\\
\)

Which is holomorphic almost everywhere on \( (s,\lambda) \in \mathbb{L} = \{(s,\lambda) \in \mathbb{C}^2\,|\, \Re \lambda > 0,\,\lambda(j-s) \neq (2k+1)\pi i,\,j,k \in \mathbb{Z},\,j\ge1\} \). There are branch cuts which arise, but they are isolated, as well as the singularities. This function is initialized as \( \text{Abl_L(s,l,n,k)} \), where s and l are the same, and n and k denote the same depths of iteration. The variable n can be increased however. The variable k is more finicky here, sometimes you can set it large, and sometimes setting it to 6 or 7 produces overflows. A good heuristic to go by, is that for complex values we can set k large, and we need to set k large to gain better accuracy. For purely real values setting k small will produce good accuracy, and setting k larger will just overflow. Here are some code snippets confirming the functional equation for about 10 - 12 digits.


Code:
Abl_L(1,log(2),100,5)

%52 = 0.1520155156321416705967746811

exp(Abl_L(0,log(2),100,5))

%53 = 0.1520155156321485241351294757

Abl_L(1+I,0.3 + 0.3*I,100,14)

%59 = 0.3353395055605129001249035662 + 1.113155080425616717814647305*I

exp(Abl_L(0+I,0.3 + 0.3*I,100,14))

%61 = 0.3353395055605136611147422467 + 1.113155080425614418399986325*I

Abl_L(0.5+5*I, 0.2+3*I,100,60)

%68 = -0.2622549204469267170737985296 + 1.453935357725113433325798650*I

exp(Abl_L(-0.5+5*I, 0.2+3*I,100,60))

%69 = -0.2622549205108654273925182635 + 1.453935357685525635276573253*I


A lot of this code is very particular to the variable \( k \). The trouble, is that, as we approach closer accuracy the logarithm seems to destabilize and I get an overflow error. I am not sure at all why this is happening, other than for larger values of k, we are getting larger and larger values being put into a logarithm, and pari just can't take it. :/  The math says though, that the larger values produce greater accuracy (which is why it works on the real number line for small values of k, because it's growing so fast and we are getting better accuracy faster); whereas for imaginary values, it takes longer for large values to appear, so setting k =60 is necessary; but once you start getting large values the accuracy goes up until we hit an overflow because the logs can't take it.

Here are the attached sources. Again, it's very rudimentary code.


.gp   Schroder_L.gp (Size: 1.61 KB / Downloads: 700)
.gp   Abel_L.gp (Size: 1.84 KB / Downloads: 705)


Lastly, this doesn't quite get us to the correct tetration function. There's still another step I haven't programmed in, which is to paste these solutions together to get the Tetration we actually want \( \text{tet}_\beta \). I'm getting there though. I'm going to ask for more help from people to see if there's anything obvious I can do to improve this code.

Thanks again.

Regards, James



I've been fiddling with the numbers more, and I thought I'd produce some 200 digit accuracy for certain values.

I've begun to realize in the code for \( \text{Abl_L(z,l,n,k)} \) that if you keep n=k and real(z) = -n = -k that you can get arbitrary precision for large enough \( n \).

By which I mean, here are some numerical examples of the family of tetrations \( F_\lambda \) converging with arbitrary precision in the left half plane. I've done it here for about 200 precision, something about 200 decimals are displayed here.


Code:
Abl_L(-1000,1+I,1000,1000)

%16 = -0.29532276871494189936534470547577975723321944770194434340228137221059739121428422475938130544369331383702421911689967920679087535009910425871326862226131457477211238400580694414163545689138863426335946 + 1.5986481048938885384507658431034702033660039263036525275298731995537068062017849201570422126715147679264813047746465919488794895784667843154275008585688490133825421586142532469402244721785671947462053*I

exp(Abl_L(-1001,1+I,1000,1000))

%17 = -0.29532276871494189936534470547577975723321944770194434340228137221059739121428422475938130544369331383702421911689967920679087535009910425871326862226131457477211238400580694414163545689138863426335945 + 1.5986481048938885384507658431034702033660039263036525275298731995537068062017849201570422126715147679264813047746465919488794895784667843154275008585688490133825421586142532469402244721785671947462053*I

Abl_L(-900 + 2*I, log(2) + 3*I,900,900)

%18 = 0.20353875452777667678084511743583613390002687634123569448354843781494362200997943624836883436552749978073278597542986537166527005507457802227019178454911106220050245899257485038491446550396897420145640 - 5.0331931122239257925629364016676903584393129868620886431850253696250415005420068629776255235599535892051199267683839967636562292529054669236477082528566454129529102224074017515566663538666679347982267*I

exp(Abl_L(-901+2*I,log(2) + 3*I,900,900))

%19 = 0.20353875452777667678084511743583613390002687634123569448354843781494362200997943624836883436552749978073278597542986537166527005507457802227019178454911106220050245980468697844651953381258310669530583 - 5.0331931122239257925629364016676903584393129868620886431850253696250415005420068629776255235599535892051199267683839967636562292529054669236477082528566454129529102221938340371793896394856865112060084*I

Abl_L(-967 -200*I,12 + 5*I,600,600)

%20 = -0.27654907399026253909314469851908124578844308887705076177457491260312326399816915518145788812138543930757803667195961206089367474489771076618495231437711085298551748942104123736438439579713006923910623 - 1.6112686617153127854042520499848670075221756090591592745779176831161238110695974282839335636124974589920150876805977093815716044137123254329208112200116893459086654166069454464903158662028146092983832*I

exp(Abl_L(-968 -200*I,12 + 5*I,600,600))

%21 = -0.27654907399026253909314469851908124578844308887705076177457491260312326399816915518145788812138543930757803667195961206089367474489771076618495231437711085298551748942104123731995533634133194224880928 - 1.6112686617153127854042520499848670075221756090591592745779176831161238110695974282839335636124974589920150876805977093815716044137123254329208112200116893459086654166069454464833417170799085356582884*I

This leads me to believe there must be some kind of manageable way of coding this to arbitrary precision for arbitrary values \( z \). I'm just not seeing it. I'll check back later.

I've added a question on stackoverflow regarding this, the link can be found here:

https://stackoverflow.com/questions/6741...3_67410814


I've updated the code for Abel_L.gp  I've made it work essentially flawlessly whereout there is a branch-cut/singularity.

This means, for instance that, \( \text{Abl_L(z,log(2),n,k)} \) gets as accurate as you want for large n and k (before capping out at about 1000, before that reaching 200 digit accuracy); if and only if z does not have imaginary part \( k \pi/\log(2) \) for \( k \in \mathbb{Z} \). This I believe is what I meant to post here, it just occured to me that if I add in one if statement, everything gets better.


Here's some further code output with the new call of Abl_L (To get the old call just use beta_function + tau_K).


Code:
Abl_L(3+5*I,2+I,100,100)

%8 = 15.1200663196084113726996578822621549291860306417726714010004342239253716532446190432940984607410001294433327830030769099833245647475387094919266911414294698020718973159623129155457864959247621572944494483657677359549605952220846281575084335046637768186335711376812853043209266498604206900517283615396 + 0.0154413032498042698439235137161907111994796403594950922888823644100610130842280732295925518332997633477295347631386476329400518730163561535044058808120135478276109805841582780898290159468773997459393954980347524620352354131865014838896294726312673191492212508552912478865091902424025717717143862084667*I

exp(Abl_L(2+5*I,2+I,100,100))

%9 = 15.1200663196084113726996578822621549291860306417726714010004342239253716532446190432940984607410001294433327830030769099833245647475387094919266911414294698020718973159623129155457864959247621572944494483657677359549605952220846281575084335046637768186335711376812853043209266498604206900517283615396 + 0.0154413032498042698439235137161907111994796403594950922888823644100610130842280732295925518332997633477295347631386476329400518730163561535044058808120135478276109805841582780898290159468773997459393954980347524620352354131865014838896294726312673191492212508552912478865091902424025717717143862084667*I

Abl_L(1.6 + 20*I, 0.3+5*I,100,100)

%10 = 2.71828182845904523536028747135266249775724712959871813321225102256571271901105581071936156664227780696595294492147108528943130700452739942797365538386174463004139713303743908232450551513833163730223951634952001001076979141010136383799044963603292514328479006198340919951738281224303430017077703855085 - 5.59090038841324852979214929915966720518674801775146129527343623926677361988265020937291650548792559291633999177861356729132079355498093880790116738389193439080209356297799632268051106346363676783243618498939659342080854442167848907452919312698823648586018500683273648314404547825798290928760017911638 E-44*I

exp(Abl_L(0.6 + 20*I, 0.3+5*I,100,100))

%11 = 2.71828182845904523536028747135266249775724712959871813321225102256571271901105581071936156664227780696595294492147108528943130700452739942797365538386174463004139713303743908232450551513833163730223951634952001001076979141010136383799044963603292514328479006198340919951738281224303430017077703855085 - 5.59090038841324852979214929915966720518674801775146129527343623926677361988265020937291650548792559291633999177861356729132079355498093880790116738389193439080209356297799632268051106346363676783243618498939659342080854442167848907452919312698823648586018500683273648314404547825798290928760017911638 E-44*I

Abl_L(4,0.3333 + 0.2333*I,100,100)

%12 = -1.15187640641189978210990929581051101163754283146294112775741172809721964962888386716287501600958778358406258145319636636158556628221772009810354250600664642314184936162757838045954616077117519726659918865038158430763042857082965089589391244260713331334319644470891691577898010494085000475872497770607 E-48 + 1.95465377642385673889692837993873578915732653532733754796391388291232066671017212613888186441334422302514625626620589547231525535813945333191238790294780773808204574519304241723789506922860807547687791607750976972833274201200602575449150873900563882476920717978414329146914922590992184541446162429337 E-47*I

exp(Abl_L(3,0.3333 + 0.2333*I,100,100))

%13 = -1.15187640641189978210990929581051101163754283146294112775741172809721964962888386716287501600958778358406258145319636636158556628221772009810354250600664642314184936162757838045954616077117519726659918865038158430763042857082965089589391244260713331334319644470891691577898010494085000475872497770607 E-48 + 1.95465377642385673889692837993873578915732653532733754796391388291232066671017212613888186441334422302514625626620589547231525535813945333191238790294780773808204574519304241723789506922860807547687791607750976972833274201200602575449150873900563882476920717978414329146914922590992184541446162429337 E-47*I

A quick note, is that moving \( n,k \) for large numbers shifts the constant \( z_0 \) where \( F_\lambda(z_0) = 0 \); so for that it can move the z variable around. But it keeps the functional equation.
Reply


Messages In This Thread
RE: Handling large iterated exponentials and their pullbacks - by JmsNxn - 05/06/2021, 12:21 AM



Users browsing this thread: 1 Guest(s)