What are these points of lower magnitude in the Riemann Zeta?

59 Views Asked by At

I recently visualized the Riemann Zeta function and noticed an interesting pattern: there are points of slightly lower magnitude along a very slightly curved vertical line, extending furthest out to the real part of 1. I'm curious if anyone can shed light on what these points might signify or if they're related to the critical line.

Visualization of the graph and the points of slightly lower magnitude:

Visualization of the graph and the points of slightly lower magnitude.

I visualized the Riemann Zeta function using Python and matplotlib, with each pixel representing a complex coordinate in the range of -5 to 5 on both the real and imaginary axes. The color of each pixel is determined by the magnitude of the corresponding value of the Riemann Zeta function, displayed on a logarithmic scale for better visualization. I'll provide the exact script at the bottom so you can have a look yourselves. In the script, I'm using the following function:

$$F(z) = \sum_{n=1}^{\infty} \frac{1}{n^z}$$

Here I calculate the function for each pixel in the complex plane defined by the meshgrid (X, Y). The variable Z represents the complex number at each pixel, and I'm summing up the series up to max_iter terms. This summation process is an approximation of the Riemann Zeta function. The purpose of this summation is to capture the behavior of the Riemann Zeta function across the complex plane, and the resulting array contains the values of the function at each corresponding complex coordinate. Does anyone have insights into what these points are within the context of the Riemann Zeta function? I'm particularly interested in understanding if these points have any relation to the critical line or if there's existing literature discussing such features. Looking forward to your insights and discussions!

import numpy as np
import matplotlib.pyplot as plt
import mplcursors

def riemann_zeta_v(width, height, xmin, xmax, ymin, ymax, max_iter):
    x, y = np.linspace(xmin, xmax, width), np.linspace(ymin, ymax, height)
    X, Y = np.meshgrid(x, y)
    Z = X + 1j * Y
    vis = np.zeros_like(Z, dtype=np.complex128)

    for n in range(1, max_iter):
        vis += 1 / np.power(n, Z)

    # Color the vis based on the magnitude of the values (logarithmic scale for better visualization)
    colors = np.log(np.abs(vis))

    # Display the vis
    plt.imshow(colors, extent=(xmin, xmax, ymin, ymax), cmap='viridis')
    plt.colorbar()
    plt.title('Riemann Zeta')
    plt.xlabel('Real')
    plt.ylabel('Imaginary')

    # Add cursor to display complex coordinates
    mplcursors.cursor(hover=True)

    plt.show()

# Set parameters
width, height = 1800, 1800
xmin, xmax = -5, 5
ymin, ymax = -5, 5
max_iter = 50

# Generate and display the vis
riemann_zeta_v(width, height, xmin, xmax, ymin, ymax, max_iter)