Hey everyone!
So I managed to make the matrix add on work. I wasn't sure how to do it at first; but after fiddling a lot. I believe I've done it. The key was to package with the code a file "INIT.dat" which contains all the matrix values. This file is about 2.3 mbs; and stores a 100x100 matrix of Taylor values in two variables which have 100 precision. It's sufficient for 100 digit precision computation of all the \( \beta \) functions. I've included the code of how the file is made. Beware though, if you want to increase precision/series precision, that creating a new INIT.DAT will take at least an hour. It was already about 2 hours on my decent PC to make a 100 digit precision initialization. Obviously just running that initialization protocol is unheard of, so I just prepackaged the initialization. The code is done similarly to Sheldon, where you have to initialize first. But for 100 digits and 100 series precision; the INIT.dat I've packaged here is enough. Just include it in the same folder as the source code, and there shouldn't be any problems. This code is much more intensive than Sheldon's; I am not a programmer by trade, but I can get around it. Please accept that this is very slow code. Plus; Kneser is ideal because it can be coded so fast; the beta method is much more precarious.
The code is a very different approach; and probably the approach I should've taken from the get go. It follows Sheldon's idea of how to program the \( \phi \)-method. Where we first make the change of variables \( w = \log(s)/\lambda \) and calculate the taylor series in \( w,\lambda \) about \( w = 0 \). Then, we store those values. Effectively we avoid overflow errors much better; as we're not pulling back, we're pushing forward.
The code, again, isn't perfect; but it's effectively deleted the hair problem. It still runs rather slow when trying to graph something, but it works. It's pretty much complete at this point. I think this is more than enough to state that the \( \beta \)-method is holomorphic; and produces a different tetration than Kneser.
I've included three files: INIT.dat, Abel_M.gp, Read me.txt
Which is the initialization file, the source code (which includes mike3's graphing tool), and a read me text file. The read-me file essentially breaks down more of the nuances of the program; but there's not much to that. There is more information in the comments of the code.
To accentuate what I've made better; here's the main \( \beta \)-function in question.
\( \beta(z) \) for \( 0 \le \Re(z) \le 6 \) and \( -3 \le \Re(z) \le 3 \):
\( \beta(z) \) for \( 1 \le \Re(z) \le 6 \) and \( 1 \le \Im(z) \le 6 \):
These look like \( \text{tet}_\beta(z) \) upto \( \mathcal{O}(e^{-\sqrt{z}}) \). With these higher-res \( \beta \)-functions we get a tetration without hairs. This method will over flow as we increase the imaginary value--the same way it'll overflow if we increase the real value. This is to be expected. The \( \beta \) method diverges nearly uniformly at \( |\Im(z)|, \Re(z) = \infty \) on the Riemann Sphere.
The first procedures coded in, are perhaps the best coded aspect of this method; this is the preliminary periodic solutions to tetration.
\(
\text{tet}_\lambda(s) = F_\lambda(s) = \beta_\lambda(s+x_\lambda) + \tau_\lambda(s+x_\lambda)\\
F_\lambda(0) = 1\\
F_\lambda(s+1) = e^{F_\lambda(s)}\\
F_\lambda(s+2\pi i/ \lambda) = F_\lambda(s)\\
\)
Now the code does not include the function \( x_\lambda \) but I describe the procedure with which to calculate \( x_\lambda \). It proved too difficult to hardcode a procedure that just found \( x_\lambda \) without further initialization data (which translates to, much more cpu processing time). So the function you are actually calculating is \( \text{tet}_\lambda(s-x_\lambda) \) which is not normalized. Nonetheless \( x_\lambda \approx 2 \) to a about 2 digits.
Choosing large \( \lambda \) will produce errors very fast; this is because the strip of holomorphy shrinks very fast; and we get too close to the singularities. Try to keep \( |\lambda| \approx 3 \) maximally; but you'll still see a bunch of crazy branch cuts at this level. This is to be expected and does not violate the math.
This code runs much more smoothly than \( \text{tet}_\beta \); and so I'm attaching here a very large graph of the function \( \text{tet}_1(s-x_1) \) over the domain \( -1 \le \Re(s) \le 5 \) and \( |\Im(s)| \le 3 \); right before the wall of singularities which happen along \( |\Im(s)| = \pi \). Things get very volatile about \( \pi \); it may work pointwise, but mike's graphing program likes to short circuit.
Remember the goal of the beta method is to move this wall of singularities to \( \infty \) on the Riemann Sphere.
As for the actual beta method, the program doesn't run perfectly--but it is well enough to be posted. I can't think of anyway to make this program better--so I've put a pin in working on it. The trouble lies with avoiding overflow errors while maintaining accuracy. As to this, you can notice in the following graph the waves which appear at about \( \Im(z) \approx 1.2 \). To work around that, I suggest expanding a taylor series about \( \Im(z) \approx 1.1 \) and summing that.
Nonetheless, here is the function \( \text{tet}_\beta(z) \) for \( -1 \le \Re(z) \le 3 \) and \( |\Im(z)| \le 2 \):
To grab a Taylor series, write, Sexp(A+z,z) for a taylor series about the constant A (this works similarly for other functions--you have to flag the variable you want the taylor series in). Grabbing Taylor series is pretty slow, but it does work; it may glitch at some points--and I'm still not sure why. I had to implicitly guess the depth of recursion needed for each point; and this causes a bit of shifting in the function. The waves in the above picture are, if I were to hazard a guess, where the depth of recursion jumps a bit. Sadly, I can't think of any work around. We need to sample \( \beta(z) \) for large values to get accuracy and precision--but this causes overflow errors pretty fast. I've yet to find a work around that doesn't sacrifice the global structure.
Nonetheless, I believe this code works argumentatively, as proof that the beta method is not Kneser's method. Further, I find it as evidence that a purely recursive definition of Tetration is possible--one that does not rely on a theta mapping/fixed point asymptotic theory (Kneser/Kouznetsov). Although this code diverges as we increase the imaginary argument--it shows that the beta method displays divergence at \( |\Im(s)| = \infty \). My previous graphs, although mostly approximations for large imaginary arguments, we're constructed with limiters on the maximum values. There are no limiters on this code; as such, we just overflow. A good heuristic is that if \( \text{tet}_\beta(s_0) = \text{overflow} \) that we just have a very large value that Pari can't handle. This isn't always so, but it's a good heuristic.
This calculator does not work if you pull back in the left half plane. It over flows relatively fast. This is because of the choice of mapping \( y = \sqrt{1+s} \) which borders the boundary of \( \Re(y) = 0 \), for \( \Re(s) \to -\infty \). As for the left half plane I haven't coded perfectly. Taking principal branches of log is not the answer though--as this would imply a single fixed point at \( \Re(s) = -\infty \); rather than the multitude of dips and jumps we may/may not see with the beta method. I have yet to prove anything about the beta method in the left half plane. As so, the ball's up in the air. I've only shown its holomorphic--nothing that's characteristic.
And so, enough apologizing and explaining--here's the GitHub repository, which you can download the zip file from. I can't directly link the zip file here as it exceeds upload capacity.
https://github.com/JmsNxn92/MATRIX_ADD_O..._TETRATION
So I managed to make the matrix add on work. I wasn't sure how to do it at first; but after fiddling a lot. I believe I've done it. The key was to package with the code a file "INIT.dat" which contains all the matrix values. This file is about 2.3 mbs; and stores a 100x100 matrix of Taylor values in two variables which have 100 precision. It's sufficient for 100 digit precision computation of all the \( \beta \) functions. I've included the code of how the file is made. Beware though, if you want to increase precision/series precision, that creating a new INIT.DAT will take at least an hour. It was already about 2 hours on my decent PC to make a 100 digit precision initialization. Obviously just running that initialization protocol is unheard of, so I just prepackaged the initialization. The code is done similarly to Sheldon, where you have to initialize first. But for 100 digits and 100 series precision; the INIT.dat I've packaged here is enough. Just include it in the same folder as the source code, and there shouldn't be any problems. This code is much more intensive than Sheldon's; I am not a programmer by trade, but I can get around it. Please accept that this is very slow code. Plus; Kneser is ideal because it can be coded so fast; the beta method is much more precarious.
The code is a very different approach; and probably the approach I should've taken from the get go. It follows Sheldon's idea of how to program the \( \phi \)-method. Where we first make the change of variables \( w = \log(s)/\lambda \) and calculate the taylor series in \( w,\lambda \) about \( w = 0 \). Then, we store those values. Effectively we avoid overflow errors much better; as we're not pulling back, we're pushing forward.
The code, again, isn't perfect; but it's effectively deleted the hair problem. It still runs rather slow when trying to graph something, but it works. It's pretty much complete at this point. I think this is more than enough to state that the \( \beta \)-method is holomorphic; and produces a different tetration than Kneser.
I've included three files: INIT.dat, Abel_M.gp, Read me.txt
Which is the initialization file, the source code (which includes mike3's graphing tool), and a read me text file. The read-me file essentially breaks down more of the nuances of the program; but there's not much to that. There is more information in the comments of the code.
To accentuate what I've made better; here's the main \( \beta \)-function in question.
\( \beta(z) \) for \( 0 \le \Re(z) \le 6 \) and \( -3 \le \Re(z) \le 3 \):
\( \beta(z) \) for \( 1 \le \Re(z) \le 6 \) and \( 1 \le \Im(z) \le 6 \):
These look like \( \text{tet}_\beta(z) \) upto \( \mathcal{O}(e^{-\sqrt{z}}) \). With these higher-res \( \beta \)-functions we get a tetration without hairs. This method will over flow as we increase the imaginary value--the same way it'll overflow if we increase the real value. This is to be expected. The \( \beta \) method diverges nearly uniformly at \( |\Im(z)|, \Re(z) = \infty \) on the Riemann Sphere.
The first procedures coded in, are perhaps the best coded aspect of this method; this is the preliminary periodic solutions to tetration.
\(
\text{tet}_\lambda(s) = F_\lambda(s) = \beta_\lambda(s+x_\lambda) + \tau_\lambda(s+x_\lambda)\\
F_\lambda(0) = 1\\
F_\lambda(s+1) = e^{F_\lambda(s)}\\
F_\lambda(s+2\pi i/ \lambda) = F_\lambda(s)\\
\)
Now the code does not include the function \( x_\lambda \) but I describe the procedure with which to calculate \( x_\lambda \). It proved too difficult to hardcode a procedure that just found \( x_\lambda \) without further initialization data (which translates to, much more cpu processing time). So the function you are actually calculating is \( \text{tet}_\lambda(s-x_\lambda) \) which is not normalized. Nonetheless \( x_\lambda \approx 2 \) to a about 2 digits.
Choosing large \( \lambda \) will produce errors very fast; this is because the strip of holomorphy shrinks very fast; and we get too close to the singularities. Try to keep \( |\lambda| \approx 3 \) maximally; but you'll still see a bunch of crazy branch cuts at this level. This is to be expected and does not violate the math.
This code runs much more smoothly than \( \text{tet}_\beta \); and so I'm attaching here a very large graph of the function \( \text{tet}_1(s-x_1) \) over the domain \( -1 \le \Re(s) \le 5 \) and \( |\Im(s)| \le 3 \); right before the wall of singularities which happen along \( |\Im(s)| = \pi \). Things get very volatile about \( \pi \); it may work pointwise, but mike's graphing program likes to short circuit.
Remember the goal of the beta method is to move this wall of singularities to \( \infty \) on the Riemann Sphere.
As for the actual beta method, the program doesn't run perfectly--but it is well enough to be posted. I can't think of anyway to make this program better--so I've put a pin in working on it. The trouble lies with avoiding overflow errors while maintaining accuracy. As to this, you can notice in the following graph the waves which appear at about \( \Im(z) \approx 1.2 \). To work around that, I suggest expanding a taylor series about \( \Im(z) \approx 1.1 \) and summing that.
Nonetheless, here is the function \( \text{tet}_\beta(z) \) for \( -1 \le \Re(z) \le 3 \) and \( |\Im(z)| \le 2 \):
To grab a Taylor series, write, Sexp(A+z,z) for a taylor series about the constant A (this works similarly for other functions--you have to flag the variable you want the taylor series in). Grabbing Taylor series is pretty slow, but it does work; it may glitch at some points--and I'm still not sure why. I had to implicitly guess the depth of recursion needed for each point; and this causes a bit of shifting in the function. The waves in the above picture are, if I were to hazard a guess, where the depth of recursion jumps a bit. Sadly, I can't think of any work around. We need to sample \( \beta(z) \) for large values to get accuracy and precision--but this causes overflow errors pretty fast. I've yet to find a work around that doesn't sacrifice the global structure.
Nonetheless, I believe this code works argumentatively, as proof that the beta method is not Kneser's method. Further, I find it as evidence that a purely recursive definition of Tetration is possible--one that does not rely on a theta mapping/fixed point asymptotic theory (Kneser/Kouznetsov). Although this code diverges as we increase the imaginary argument--it shows that the beta method displays divergence at \( |\Im(s)| = \infty \). My previous graphs, although mostly approximations for large imaginary arguments, we're constructed with limiters on the maximum values. There are no limiters on this code; as such, we just overflow. A good heuristic is that if \( \text{tet}_\beta(s_0) = \text{overflow} \) that we just have a very large value that Pari can't handle. This isn't always so, but it's a good heuristic.
This calculator does not work if you pull back in the left half plane. It over flows relatively fast. This is because of the choice of mapping \( y = \sqrt{1+s} \) which borders the boundary of \( \Re(y) = 0 \), for \( \Re(s) \to -\infty \). As for the left half plane I haven't coded perfectly. Taking principal branches of log is not the answer though--as this would imply a single fixed point at \( \Re(s) = -\infty \); rather than the multitude of dips and jumps we may/may not see with the beta method. I have yet to prove anything about the beta method in the left half plane. As so, the ball's up in the air. I've only shown its holomorphic--nothing that's characteristic.
And so, enough apologizing and explaining--here's the GitHub repository, which you can download the zip file from. I can't directly link the zip file here as it exceeds upload capacity.
https://github.com/JmsNxn92/MATRIX_ADD_O..._TETRATION