primepatterns
primepatterns
Prime Patterns
117 posts
Observations
Don't wanna be here? Send us removal request.
primepatterns · 3 years ago
Note
Sorry for randomly reblogging those (probably old) posts but I just love the weird brightly colored images your math stuff produced.
Hi, I'm glad you liked the pics, it's been a while since I did this kind of math!
3 notes · View notes
primepatterns · 4 years ago
Text
Riemann zeta function: leveraging main bulb repetition to speed-up fractal rendering
In my previous post, I demonstrated how any fixed image of a certain size centred on the origin can be deformed and repeated in arbitrary regions of the complex plane by the action of the Riemann zeta function.
In practice, for each point, s, in the relevant region of the complex plane, ζ(s) is calculated. If the real and imaginary parts of ζ(s) are within the bounds of the area covered by the fixed image, the colour of the pixel at the {x,y} value {Re(ζ(s), Im( ζ(s))} can be used to colour the pixel at s.
If the fixed image is a high resolution image of the iteration fractal of the Riemann zeta function, we can avoid iterating every point, s, in the target region of the complex plane by using the fixed image as a "lookup table".
Here is the resultant plot for the region of the complex plane covering -2 Re(s) < 5 and 80 < Im(s) < 100 at a resolution of 100 pixels per unit. The image has been rotated clockwise by 90° such that the imaginary axis runs from left to right. The image is derived from a 5001 x 5001 pixel fixed image "lookup table" whose points, f, are in the following ranges: -25 < Re(f) < 25 and -25 Im(f) < 25, also at a resolution of 100 pixels per unit:
-2 < Re(s) < 5, -80 < Im(s) < 100, 100 pixels per unit
Tumblr media
It is clear that, for values of s where Re(s) > 0, there is insufficient resolution in the lookup table to give decent resolution in the final image. In the positive real half plane, the value of ζ(s) tends to 1. On that basis, it makes sense to increase the resolution of the lookup table close to the pole of the Riemann zeta function at f = 1.
However, given that the resolution in the rest of the generated image is reasonable, there is no need to create a very large lookup table with a resolution of, say, 1000 pixels per unit. Instead, we can create a series of "nested" lookup tables of increasing resolution centred on the pole, and programmatically decide which to consult after the value of ζ(s) has been calculated.
Here is the resultant plot for same region of the complex plane as above, but derived from a series of four 5001 x 5001 pixel fixed image lookup tables whose points, f, are centred over the pole and which have resolutions of 100, 1000, 10000 and 100000 pixels per unit:
-2 < Re(s) < 5, -80 < Im(s) < 100, 100 pixels per unit
Tumblr media
The resolution of the region where Re(s) > 0 is much improved.
Here are the fixed image lookup tables used to generate the above image. Note that they are all centred on the pole at f = 1:
-24.0 < Re(f) < 26.0, -25.0 < Im(f) < 25.0, 100 pixels per unit
Tumblr media
-1.50 < Re(f) < 3.50, -2.50 < Im(f) < 2.50, 1000 pixels per unit
Tumblr media
0.75 < Re(f) < 1.25, -0.25 < Im(f) < 0.25, 10000 pixels per unit
Tumblr media
0.975 < Re(f) < 1.025, -0.025 < Im(f) < 0.025, 100000 pixels per unit
Tumblr media
These tables are good for images where Re(s) < 16. Experiments suggest that a further fixed image lookup table with a resolution of 1000000 can extend the scope even further into the positive real half plane. However, I am typically interested in fractal images confined to the region where -2 < Re(s) < 5, so I tend to use only the above four fixed image lookup tables.
Another obvious limitation of using fixed image lookup tables to avoid formal iteration of each point, s, is that the values of ζ(s) where Re(s) < 0 are far too large to be accommodated by any reasonable lookup table. Pixels outside the bounds of the lowest resolution lookup table are therefore coloured black.
However, one aspect of these regions is that iteration is not very costly programmatically provided that appropriate bail-out limits are applied. The vast majority of points in this region blow-up on iteration, and they do so quickly.
Therefore, because only a few iterations are required for the majority of pixels outside the bounds of the lookup tables, it is a trivial matter to provide a function which enables the user to choose to formally iterate any pixel that falls outside the bounds of the lookup tables in order to "fill in" the black regions without too much impact on resolution time.
Here are some resultant images with and without fill in:
-2 < Re(s) < 5, 80 < Im(s) < 100, 100 pixels per unit, without fill-in
Tumblr media
-2 < Re(s) < 5, 80 < Im(s) < 100, 100 pixels per unit, with fill-in
Tumblr media
-2 < Re(s) < 5, 980 < Im(s) < 1000, 100 pixels per unit, without fill-in
Tumblr media
-2 < Re(s) < 5, 980 < Im(s) < 1000, 100 pixels per unit, with fill-in
Tumblr media
-2 < Re(s) < 5, 9980 < Im(s) < 10000, 100 pixels per unit, without fill-in
Tumblr media
-2 < Re(s) < 5, 9980 < Im(s) < 10000, 100 pixels per unit, with fill-in
Tumblr media
-2 < Re(s) < 5, 99980 < Im(s) < 100000, 100 pixels per unit, without fill-in
Tumblr media
-2 < Re(s) < 5, 99980 < Im(s) < 100000, 100 pixels per unit, with fill-in
Tumblr media
-2 < Re(s) < 5, 999980 < Im(s) < 1000000, 100 pixels per unit, without fill-in
Tumblr media
-2 < Re(s) < 5, 999980 < Im(s) < 1000000, 100 pixels per unit, with fill-in
Tumblr media
Using fixed image lookup tables leads to a reasonable speed up in rendering performance and good reproducibility. The resultant images are essentially indistinguishable from those generated by zeta_machine.
The rendering of images very high up the imaginary axis is still painfully slow, however, because for every point, s, ζ(s) must be calculated at least once, and the Euler Maclaurin summation requires a partial sum to be calculated with a number of terms in the order of |s|.
5 notes · View notes
primepatterns · 5 years ago
Text
Zeta functions: main bulb repetition in iteration fractals
In previous posts on this page, and in a recent talk on this subject, I have remarked that the iteration fractal in the neighbourhood of each non-trivial zero of the Riemann zeta function is a scaled and distorted reproduction of the main bulb.
One way of evidencing this phenomenon is to generate the fractal for each starting value, s, in a random section of the complex plane and, for each value of s where the real and imaginary parts of ζ(s) are both within some fixed distance from the origin, to place a pixel at that point with the same colour as the colour ascribed to s in the fractal image.
For example, the following iteration fractal image covers the section of the complex plane between -2 ≤ Re(s) ≤ 13 and 100 ≤ Im(s) ≤ 150, with a resolution of 100 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
The image contains ‭7,506,501‬ pixels. For many of the individual starting values, s, the absolute values of the real and imaginary parts of ζ(s) are less than 25. If each qualifying pixel is plotted in a simple x,y plot covering the section of the complex plane between -25 ≤ Re(s) ≤ 25 and -25 ≤ Im(s) ≤ 25, using the colour of the pixel ascribed to the starting value, s, in the above image, the result is as follows:
Tumblr media
It is clear that the overall image corresponds to the main bulb of the iteration fractal, but the density of coverage away from the origin decreases rapidly.
The same logic can be applied to Hurwitz zeta functions, ζ(s, a), with rational a.
For example, the following iteration fractal image for the Hurwitz zeta function ζ(s, 0.75) covers the section of the complex plane between -2 ≤ Re(s) ≤ 13 and 100 ≤ Im(s) ≤ 150, with a resolution of 100 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
As before, for many of the individual starting values, s, the absolute values of the real and imaginary parts of ζ(s, 0.75) are less than 25. If each qualifying pixel is plotted in a simple x,y plot covering the section of the complex plane between -25 ≤ Re(s) ≤ 25 and -25 ≤ Im(s) ≤ 25, using the colour of the pixel ascribed to the starting value, s, in the above image, the result is as follows:
Tumblr media
Again, it is clear that the overall image corresponds to the main bulb of the iteration fractal. The density of coverage is higher than for the Riemann zeta function.
It is also possible to work in the opposite direction.
For example, the following iteration fractal image for the Hurwitz zeta function ζ(s, 0.75) covers the section of the complex plane between -25 ≤ Re(s) ≤ 25 and 25 ≤ Im(s) ≤ 25, with a resolution of 40 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
The absolute value of the real and imaginary parts of ζ(s, 0.75) for each starting value, s, in a given section of the complex plane may be less 25. If so, we can colour the pixel corresponding to s using the corresponding pixel colour from the above image.
The result for the section of the complex plane covering -2 ≤ Re(s) ≤ 13 and 100 ≤ Im(s) ≤ 150, with a resolution of 100 pixels per unit, is as follows:
Tumblr media
The image constitutes a reasonable approximation of the directly calculated fractal (see above) and takes considerably less time to generate. The black areas above and below the image correspond to places where the real and/or imaginary parts of ζ(s, 0.75) are greater than 25.
Another way to visualise this scaling and distortion phenomenon caused by zeta functions is to repeat the previous experiment with an arbitrary geometric design.
For example, the following image corresponds to the section of the complex plane covering -25 ≤ Re(s) ≤ 25 and 25 ≤ Im(s) ≤ 25, with a resolution of 40 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
The following image is formed by calculating ζ(s) for each staring value, s, in the section of the complex plane covering -2 ≤ Re(s) ≤ 13 and 200 ≤ Im(s) ≤ 220 and colouring those pixels where the absolute value of the real and imaginary parts of ζ(s) are less than 25 using the corresponding pixel colour from the above image. The result is as follows:
Tumblr media
The overall pattern is preserved with repetition, but it is clear that the green and yellow sections are twisted such that they face upwards rather than their downward orientation in the original image.
Here is the corresponding image for ζ(s, 0.35):
Tumblr media
It is clear that, not only are the green and yellow sections twisted above, there is a repetition below where the blue and red sections are twisted such that they face downwards rather than their upward orientation in the original image.
Here is the corresponding image for ζ(s, 0.75):
Tumblr media
The repetition in the lower section has persisted. Additional experiments indicate that this repetition below is a feature of all Hurwitz zeta functions ζ(s, a) with rational a.
The same kind of distortion can be applied to any image arbitrarily centred on the origin in the complex plane. The results are particularly disconcerting when the original image is a human face. For example, here is a computer generated image of a human face copied from the website thispersondoesnotexist.com:
Tumblr media
Here is the distortion caused by ζ(s, 0.35) in the section of the complex plane covering -2 ≤ Re(s) ≤ 13 and 200 ≤ Im(s) ≤ 220:
Tumblr media
Here is the corresponding distortion caused by ζ(s, 0.75):
Tumblr media
The inversion / twisting, and upper and lower repetitions that are a feature of Hurwitz zeta functions are easy to discern.
11 notes · View notes
primepatterns · 6 years ago
Text
Riemann zeta function: more evidence of self-similarity in the iteration fractal
In my last post, I provided some evidence that fractal feature details are reproduced at predictable locations, and can be revealed with appropriate scaling.
In this post, I provide some indirect evidence of the scaling of first generation reproductions.
The following iteration fractal image covers the section of the complex plane between -10 ≤ Re(s) ≤ 10 and 40 ≤ Im(s) ≤ 55, with a resolution of 100 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
The image shows five non-trivial zeros. Associated with each non-trivial zero are two first generation reproductions of the main arms of the fractal. These reproductions appear as substantially vertical, mainly orange, tapered projections into the negative real half-plane. One can envisage that these reproductions, like the main arms, have infinite length, albeit invisible at this resolution.
Arranged along each of the five first generation reproductions that correspond to the positive main arm are a series of greyscale dots. These dots have been produced using the delta function of zeta_machine. In each case, they show all points, s, where ζ(s) is within a certain distance of a target value.
Although the grey dots appear similar in size, they span a remarkably wide range of delta target and distance values.
In order of increasing distance from the critical line, the values for each target (”T”) and distance (”D”) pair are as follows:
T: ζ(s) = 0.5 + 1,000,000i, D = 200,000
T: ζ(s) = 0.5 + 10,000,000i, D = 2,000,000
T: ζ(s) = 0.5 + 100,000,000i, D = 20,000,000
Putting it another way, each grey disk has a |ζ(s)| radius D, and is centred on value ζ(s) = T.
The even spacing between the grey disks associated with each first generation reproduction, coupled with the order of magnitude increase in scale between disks, is evidence of an exponential rate of change in scale.
Unfortunately, zeta_machine is unable to calculate ζ(s) where |Im(s)| > 1,000,000, so I cannot show what the iteration fractal looks like under the grey disks. However, delta images in the neighbourhood of the disks at very large scales suggest that the Riemann zeta function, and the corresponding iteration fractal, are well behaved.
6 notes · View notes
primepatterns · 6 years ago
Text
Riemann zeta function: self-similarity in the iteration fractal
As I have previously noted, the main “arms” of the iteration fractal of the Riemann zeta function appear to be reproduced, with distortion, at every level of magnification.
The first generation reproductions are particularly noticeable in the left half of the complex plane where Re(s) << 0 (thin, tapering, almost vertical projections), and in the right half of the complex plane where Re(s) > 1 (thicker, but otherwise similar).
Until now, I have assumed, without proof, that any fractal feature that appears on the main arms can be located on any reproduction given sufficient magnification.
In this post I provide evidence in support of my assumption.
First, I have set out below an image of the (positive) main fractal arm in the vicinity of the first fractal island whose corresponding non-trivial zero is at approximately 0.5 + 1686.421i. The image covers the section of the complex plane between -1 ≤ Re(s) ≤ 5 and 1681 ≤ Im(s) ≤ 1691, with a resolution of 100 pixels per unit.
All of the images in this post have been rotated 90° clockwise such that the imaginary axis runs from left to right:
Tumblr media
My intention was to locate a reproduction of this first fractal island on a randomly chosen first generation reproduction of the main arms. I was particularly interested to see what level of magnification would be required to render the reproduction island visible, and whether there would be any major distortion 
I chose a random section of the main arms (-5 ≤ Re(s) ≤ 5, 50 ≤ Im(s) ≤ 60) and used the delta function of zeta_machine to identify regions where ζ(s) was within a certain distance of 0.5 + 1686.421i.
Initially, I used a resolution of 50 pixels per unit and a delta distance value of 50. Despite such a wide “net”, I only identified a couple of qualifying pixels. I repeated the analysis at resolutions of 2000, 20000 and 200000 pixels per unit in order to obtain a more accurate value of s where ζ(s) =  0.5 + 1686.421i.
The following image shows the original area of interest, with a magenta dot highlighting the sub-region where the delta evidence indicated the fractal island reproduction would be found. It is clear that the region is located in a continuation of a first generation reproduction of the (positive) main arm:
Tumblr media
Having identified the region of interest, I used the zeta_machine image function to plot the iteration fractal with a resolution of 2000000 pixels per unit:
Tumblr media
As anticipated, the resultant image is a perfect reproduction of the original island, albeit rotated  90° anticlockwise as would be expected given the angle between the main arms and the first generation reproductions.
In this final plot, the point, s, where ζ(s) = 0.5 + 1686.421i is located at approximately s = -2.92859 + 53.99008i. Obviously, ζ(ζ(s)) at this point will be 0.
The plot settings are:
Real low: -2.92884
Real high: -2.92834
Imaginary low: 53.98983
Imaginary high: 53.99033
Resolution: 2000000
I assume that reproductions of this first fractal island, and any other feature, can similarly be located using the delta function to identify qualifying regions with greater and greater accuracy before plotting the relevant image.
6 notes · View notes
primepatterns · 6 years ago
Text
Zeta_machine: animation of colour phase plots of Hurwitz zeta functions
The animation below shows colour phase plots of the Hurwitz zeta functions ζ(s, a) for rational 0.1 ≤  a ≤ 2.5 in increments of 0.1.
Each frame of the animation covers the section of the complex plane between -30 ≤ Re(s) ≤ 10 and -50 ≤ Im(s) ≤ 50, with a resolution of 10 pixels per unit. The frames have been rotated 90° clockwise such that the imaginary axis runs from left to right.
Tumblr media
When a = 1, the function is the Riemann zeta function. The frame where a = 1 is easily recognisable because the bottom portion of the frame is pure red rather than the multicoloured and black portions associated with functions where the value of a is not 1.
4 notes · View notes
primepatterns · 6 years ago
Text
Zeta_machine: colour phase plots of zeta functions
I have recently added a function to zeta_machine to generate colour phase plots of the Riemann zeta function, Hurwitz zeta functions and Dirichlet L functions.
For each pixel in the plot corresponding to a complex value, s, the relevant function, z = f(s) is evaluated, and the pixel is coloured according to the values of Arg(z) and |z|, based on the colouring of the unit disk below:
Tumblr media
For each pixel corresponding to z = f(s), the value of Arg(z) determines the hue (reading anticlockwise, with red indicating a positive real value for z), and the value of |z| determines the brightness, with black indicating zero and higher values quickly leading to full saturation.
Pixels close to zeros are coloured black. The new colour map function assigns a white colour to pixels corresponding to poles.
I have set out below, three example images, one for each of the key functions featured on this page.
Each image covers the section of the complex plane between -30 ≤ Re(s) ≤ 10 and -30 ≤ Im(s) ≤ 30, with a resolution of 10 pixels per unit. The images have been rotated 90° clockwise such that the imaginary axis runs from left to right.
Riemann zeta function
Tumblr media
Hurwitz zeta function, a = 0.75
Tumblr media
Dirichlet L function, principal character, modulus = 5
Tumblr media
The trivial and non-trivial zeros are clearly visible as small black dots. In the Riemann zeta function image, the non-trivial zeros line up along the critical line. The Hurwitz zeta function image shows that the non-trivial zeros have variable real parts, whereas the Dirichlet L function image shows that the real parts of the non-trivial zeros are either 0 or 0.5.
2 notes · View notes
primepatterns · 6 years ago
Text
Modular forms: iteration fractal of the Dedekind eta function, update
My previous post featured a first image of the iteration fractal of the Dedekind eta function. Subsequent analysis of the data has led me to revise the colour scheme. The Dedekind eta function has two attractive fixed points: a complex fixed point at approximately 0.8252 + 0.3133i and a real fixed point at 0.
As with images of iteration fractals of Hurwitz zeta functions that have two attractive fixed points, I have revised the colour scheme for the iteration fractal of the Dedekind eta function to render pixels that converge on the second fixed point in shades of grey.
This new colour scheme is illustrated in the following images:
-1 ≤ Re(s) ≤  25, 0 ≤ Im(s) ≤ 25, 100 pixels per unit
Tumblr media
-0.5 ≤ Re(s) ≤  0.5, 0 ≤ Im(s) ≤ 0.6, 1000 pixels per unit
Tumblr media
-0.1 ≤ Re(s) ≤  0.1, 0 ≤ Im(s) ≤ 0.2, 20000 pixels per unit
Tumblr media
Given the links between modular forms and L functions, I am hopeful of finding further interesting fractals.
1 note · View note
primepatterns · 6 years ago
Text
Modular forms: iteration fractal of the Dedekind eta function
The image below is my first effort at generating an iteration fractal from a modular form, in this case the Dedekind eta function:
Tumblr media
The image shows points, s, in the section of the complex plane between -1 < Re(s) < 25 and 0 < Im(s) < 25. The zeros are located along the real axis, which forms the bottom edge of the image.
The main block is 24 units wide, and is divided into two rather different columns, each 12 units wide. The main block repeats as you move along the real axis.
The blue / cyan coloured regions are those points, s, where iteration of η(s) leads to undefined values (i.e. values with a negative imaginary part). The green / yellow / red regions are those points, s, where iteration of η(s) leads to the attractive fixed point at approximately 0.8252 + 0.3133i.
Of all the functions I have looked at to date, only the Dedekind eta function has a complex fixed point.
4 notes · View notes
primepatterns · 6 years ago
Text
zeta_machine
Here is a download link for a zip file containing the full source code of the latest version of zeta_machine
The zip file also contains a pre-compiled version for Windows users, including the required database file, NTZ.db, which contains the imaginary parts of the non-trivial zeros of the Riemann zeta function between 0 < |Im(z)| < 1,000,000.
I have also included a very rough README.txt file to help explain the functions.
Edit: I will upload updated versions of this complete zeta_machine package to my Google drive. The download link will stay the same. The codebase is currently reasonably stable, but I will be fixing bugs and adding new functions from time to time, so feel free to check back.
3 notes · View notes
primepatterns · 6 years ago
Text
Hurwitz zeta function: the iteration fractal for ζ(s, 0.75) near three closely spaced complex zeros
I have now finished the major refactoring of zeta_machine and the application can now generate, and colour, iteration fractals of the Riemann zeta function, Hurwitz zeta functions ζ(s, a) for rational a > 0, and Dirichlet L functions for primitive Dirichlet characters with modulus 1 to 24, or any prime modulus.
Hurwitz zeta functions where 0.711 < a < 0.917 (approximately) have a second attractive fixed point and this leads to interesting fractal features. zeta_machine renders points, s, falling with the basins of attraction of these second attractive fixed points in shades of grey. In all other respects, the iteration fractals of Hurwitz zeta functions that I have studied have very similar characteristics to the iteration fractal of the Riemann zeta function.
For example, the complex zeros of the function appear on “segments” which may be open or looped, as exemplified in the following image of ζ(s, 0.75), which also shows features associated with the second attractive fixed point.
The image covers the section of the complex plane between 0 ≤ Re(s) ≤ 1.2 and 10006.8 ≤ Im(s) ≤ 10008.2, with a resolution of 1000 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right.
I have superimposed on the image the corresponding “xray” illustrating the contour lines that arise when values, s, on the complex plane are plotted only where ζ(s, 0.75) is either wholly real (i.e. Im(ζ(s, 0.75)) = 0, shown in purple) or wholly imaginary (i.e. Re(ζ(s, 0.75)) = 0, shown in pink). Where the contour lines cross, the real and imaginary parts of ζ(s, 0.75) are both zero, which corresponds to a complex zero:
Tumblr media
There are three complex zeros, and each is associated with a separate segment. Two of these segments are looped, and the third is open. There is some distortion of the curve of the open segment as it approaches the looped segments.
Using mpmath, I confirmed that the complex zeros are located at the following approximate values of s:
0.3886260081 + 10007.08415i 0.645470614 + 10007.88184i 0.7339947583 + 10007.31137i
6 notes · View notes
primepatterns · 6 years ago
Text
Hurwitz zeta function: iteration fractal example near a threshold
I have recently refactored zeta_machine to enable it to generate (and colour) iteration fractal images for Hurwitz zeta functions, ζ(s, a), with rational 0 < a ≤ 0.999.
Observations suggest that, where 0.109155 < a < 0.711189 (approximately), the corresponding Hurwitz zeta functions have a single attractive fixed point and produce iteration fractals broadly comparable to the Riemann zeta function iteration fractal.
Where 0.711189 < a < 0.916637 (approximately), the corresponding Hurwitz zeta functions have a second attractive fixed point, giving rise to some interesting fractal images which will be the subject of some future posts.
I was interested in generating fractal images as close as possible to the threshold. This required a rational value for a that was close to, but less than, 0.711189, and which had a denominator no higher than 1000; the value of the fraction 32/45 is 0.7111...
As I hoped, the results are interesting, particularly at high resolution.
The following image covers the section of the complex plane between 0 ≤ Re(s) ≤ 6 and -4 ≤ Im(s) ≤ 4, with a resolution of 200 pixels per unit. The image has been rotated 90° clockwise such that the imaginary axis runs from left to right.
The image shows only the ″type1″ points i.e. those values, s, for which  ζ(s, 32/45) blows up to infinity upon iteration. The colouring scheme is cyclic (between blue and cyan). This is necessary because the iteration count covers the range from 2 to 5000 inclusive (5000 being the maximum number of iterations that zeta_machine will measure):
Tumblr media
12 notes · View notes
primepatterns · 7 years ago
Text
Riemann zeta function: xrays of a series of Hurwitz zeta functions, ζ(s, a), with rational a between 0.01 and 1.50
I have recently been refactoring zeta_machine to add functionality to render iteration fractals for various Hurwitz zeta functions, ζ(s, a), for rational a. The Riemann zeta function is the special case where a = 1. Hurwitz zeta functions were the subject of an earlier post, and I now wish to integrate the general functionality into zeta_machine.
The main programming issue to overcome is providing a colour scheme for each a such that the resultant fractals' surfaces maintain a superficial similarity with the iteration fractal of the Riemann zeta function that dominates this Tumblr page, namely: blue / cyan areas corresponding to those values, s, where the value of ζ(s, a) blows up; and green / yellow / orange / red areas corresponding to those values, s, where the value of ζ(s, a) converges on the relevant function's attractor fixed point. My initial investigations suggest that, for rational a in the range 0.01 to 1.50, ζ(s, a) always has a single attractor fixed point.
This fractal colouring issue has not prevented me, however, from producing images of contour lines where Re(ζ(s, a)) = 0 or Im(ζ(s, a)) = 0 for various rational a, as per Juan Arias de Reyna's "xray" of the Riemann zeta function, which was the subject of an earlier post.
I have set out below an animation comprising 150 separate frames, each frame corresponding to the xray of a different ζ(s, a) function for rational a between 0.01 ≤ a ≤ 1.50. The value of a is incremented by 0.01 between each frame.
Each frame covers the section of the complex plane between -10 ≤ Re(s) ≤ 10 and 50 ≤ Im(s) ≤ 100, with a resolution of 40 pixels per unit. The images have been rotated 90° clockwise such that the imaginary axis runs from left to right.
In order to avoid the potentially adverse consequences of floating point indeterminism in the calculation of individual values of ζ(s, a), I tend to use unreduced fractions when entering the parameters into zeta_machine i.e. for a = 0.05, I enter 5 as the numerator of a, and 100 as the denominator, rather than the obvious reduced alternatives of 1 and 20 respectively. This generally results in longer plot times.
In each frame, the purple contour lines show those points, s, where Im(ζ(s, a)) = 0, and the pink contour lines show those points, s, where Re(ζ(s, a)) = 0. Where the contour lines cross, the real and imaginary parts of ζ(s, a) are both zero, which corresponds to a complex zero of the relevant function. The frame rate is 5 frames per second.
Here is the animation:
Tumblr media
Note the following:
in each frame, the pitch between the contour lines in regions where Re(s) << 0 reduces slowly with increasing height above the origin and, between frames, there is a perception of a gradual shift down the imaginary axis towards the real axis
the pitch between the contour lines where Re(s) > 0 increases rapidly between frames, and there is a perception of chaotic change; a wider perspective will likely be necessary to quantify what is happening
the overall impression is of two distinct “layers” moving past one another at different rates, with the area of overlap corresponding to the critical strip
apart from the special case of the Riemann zeta function, where a = 1, the complex zeros, visible where the contour lines cross, are very often located off the critical line, with a real part greater than 0.5 and, in some cases where a > 1, a real part greater than 1
the trajectory of each contour line, including whether it penetrates into the positive real half plane, or loops back into the negative real half plane, and also which, if any, contour line of the other type it crosses, appears to be governed partly by the proximity or otherwise of a contour line of the other type; the visual impression is that of attractive and repulsive forces at work
the proportion of contour lines that penetrate into the positive real half plane appears to vanish where a is close to 1
I plan to perform some more quantitative analysis of the individual frames of the animation after I have solved the fractal colouring issue. 
Early indications suggest that the iteration fractals for Hurwitz zeta functions with rational a between  1.00 < a ≤ 1.50 are visually very interesting.
72 notes · View notes
primepatterns · 7 years ago
Text
Riemann zeta function: the iteration fractal as a Minecraft map
Recently, I have been experimenting with 3D visualisation of the iteration fractal, including generating height maps and converting them into Minecraft maps using WorldPainter.
Below is a screenshot of part of the iteration fractal surface rendered in Minecraft, with the two consecutive non-trivial zeros at approximately 0.5 + 21.022i and 0.5 + 25.011i marked by tall “poles”.
In reality, the positions of the non-trivial zeros are indistinguishable on the fractal surface from their immediate neighbours:
Tumblr media
Note the following:
The top surface of the iteration fractal, which corresponds to areas within the basin of attraction of the Riemann zeta function’s attractor fixed point at approximately -0.2959, undulates fairly gently.
The top surface is far higher in all places than the surrounding blue “sea”, which corresponds to points, s, where  ζ(s) blows up under iteration.
The “segments” which carry the non-trivial zeros appear as significant valleys, and their end points correspond to high points on the plane.
I plan to experiment with different FOV settings in order to maximise the amount of surface that can be viewed.
11 notes · View notes
primepatterns · 7 years ago
Text
Riemann zeta function: deformation of the complex plane in the neighbourhood of the pole
I have recently refactored the code of zeta_machine to include a new function that enables the user to plot a “grid” of those points, s, where Re(ζ(s)) and/or Im(ζ(s)) is a multiple of a given constant corresponding to the “pitch” of an evenly spaced grid on the complex plane.
The resultant plots reveal the extent of distortion of the plane by the Riemann zeta function.
In regions of the complex plane where evaluation of ζ(s) leads to reasonable values for the real and imaginary parts, the plots are easy to interpret. Where the value of ζ(s) blows up, the grid is so deformed that the plots consist largely of noise and moiré interference patterns. This is most visible in plots that include the pole at s = 1 .
I have set out below a series of plots of the grid function centred over the pole. The “pitch” has been set to 0.1. In each case, the pole is located at the dead centre of the image.
Prior to uploading to Tumblr, each image comprised a 2001 x 2001 pixel square. I have included the original scaling data with each image:
Scale 200 pixels per unit
Tumblr media
Scale 1000 pixels per unit
Tumblr media
Scale 5000 pixels per unit
Tumblr media
Scale 25000 pixels per unit
Tumblr media
Scale 125000 pixels per unit
Tumblr media
Scale 625000 pixels per unit
Tumblr media
19 notes · View notes
primepatterns · 7 years ago
Text
Riemann zeta function: the iteration fractal in the neighbourhood of some trivial zeros
The value of the Riemann zeta function, ζ(s), is 0 whenever s is a negative even integer. These zeros are known as the “trivial zeros”.
I have set out below 6 plots of the iteration fractal in the immediate neighbourhood of the first six non-trivial zeros that lie outside the main bulb, namely the trivial zeros at s = -20, -22, -24, -26, -28 and -30.
The configuration of the fractal in each neighbourhood is the same as the main bulb and the main arms, albeit far smaller and with some distortion.
In order to ensure that the "bulb” is approximately the same size in each image, I had to increase the scale exponentially with increasing |s|. I have included the scaling data with each image. In each case, the relevant trivial zero is located at the dead centre of the image:
s = -20, scale 2000 pixels per unit
Tumblr media
s = -22, scale 20,000 pixels per unit
Tumblr media
s = -24, scale 250,000 pixels per unit
Tumblr media
s = -26, scale 4,000,000 pixels per unit
Tumblr media
s = -28, scale 100,000,000 pixels per unit
Tumblr media
s = -30, scale 2,000,000,000 pixels per unit
Tumblr media
Note the following:
In each case, the direction in which the “bulb” faces alternates: it faces in the same direction as the main bulb when s is an even multiple of -2, and faces the opposite way when s is an odd multiple of -2.
Each trivial zero lies on a part of the fractal surface where the alternating light and dark blue lines either side of the real axis meet at an angle resulting in a highly curved trajectory for the “arms” either side of the “bulb”. However, due to the enormous scale of the latter images, this local curvature is only really noticeable in the first and second images.
25 notes · View notes
primepatterns · 7 years ago
Text
Riemann zeta function: a new “xray” function of zeta_machine, and evidence that individual clumps of the iteration fractal surface are divided at Gram points
In September 2003, Juan Arias de Reyna published a paper entitled X-Ray of Riemann’s Zeta Function.
The paper contains numerous figures illustrating the contour lines that arise when values s on the complex plane are plotted only where ζ(s) is either wholly real (i.e. Im(ζ(s)) = 0) or wholly imaginary (i.e. Re(ζ(s)) = 0) .
I have recently refactored the code of zeta_machine and have included a new function that enables the user to plot the “xray” of Arias de Reyna, either independently or simultaneously with the underlying iteration fractal.
Below is an early plot of the xray and the associated iteration fractal surface covering the section of the complex plane between -1 ≤ Re(s) ≤ 5 and 28977.35 ≤ Im(s) ≤ 28980.85, with a resolution of 200 and an Epsilon setting of 15 significant figures:
Tumblr media
Note the following:
The purple contour lines show those points s where Im(ζ(s)) = 0, and the pink contour lines show those points s where Re(ζ(s)) = 0. Where the contour lines cross, the real and imaginary parts of ζ(s) are both zero, which corresponds to a non-trivial zero.
The phenomenon identified by Arias de Reyna, whereby one or more contour loops are sometimes enclosed within a larger contour loop of the same type, is visible on the left of the image.
The major division between the left and right clumps of fractal surface is associated with a purple line that does not pass through a non-trivial zero, crosses a segment endpoint, and extends into the positive real half plane. This line crosses the critical line at a Gram point, i.e. a point, s, on the critical line where Im(ζ(s)) = 0 and |Re(ζ(s))| > 0.
The “minor” division between the fractal island and the main clumps of fractal surface is also associated with a purple contour line that crosses the critical line at a Gram point.
Based on multiple initial observations at various heights above the origin, I believe that every division between the clumps of the iteration fractal surface is associated with a purple line that crosses the critical line at a Gram point.
I am currently in the process of generating iteration fractal images with superimposed xray lines covering the section of the complex plane between -1 ≤ Re(s) ≤ 5 and  0 ≤ Im(s) ≤ 50000, with a resolution of 50 and an Epsilon setting of 15 significant figures. I have already generated the values of all Gram points in this range, and have written a C# program that will enable me to ascribe to each Gram point a status value reflecting whether it is a “main divider”, an “island divider” or a “non-divider” (the vast majority). With this information I will be able to obtain detailed data on the number of non-trivial zeros per clump.
3 notes · View notes