Skip to content

Instantly share code, notes, and snippets.

@sschepis
Created August 23, 2024 00:51
Show Gist options
  • Save sschepis/635826da64beeb1d2185e07dc3248266 to your computer and use it in GitHub Desktop.
Save sschepis/635826da64beeb1d2185e07dc3248266 to your computer and use it in GitHub Desktop.
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import eigh_tridiagonal
from sympy import isprime
def potential_function(modulus):
"""Define the potential function V(x) for a given modulus."""
return np.array([10 if (n % 2 == 0 or n % 3 == 0) else 1 for n in range(modulus)])
def solve_schrodinger(modulus, V, hbar=1.0, m=1.0):
"""Solve the Schrödinger equation for a given potential function V(x)."""
N = len(V)
dx = 1.0 # Assuming unit spacing for simplicity
diagonal = np.full(N, -2.0)
off_diagonal = np.full(N - 1, 1.0)
# Solve the eigenvalue problem to get energies and wavefunctions
energies, wavefunctions = eigh_tridiagonal(diagonal + V, off_diagonal)
return energies, wavefunctions
def compute_prime_distribution(modulus):
"""Compute the distribution of primes across residue classes modulo a given modulus."""
primes = [n for n in range(1, 1000) if isprime(n)]
prime_distribution = np.zeros(modulus)
for p in primes:
prime_distribution[p % modulus] += 1
return prime_distribution
def correlation_analysis(wavefunction, prime_distribution):
"""Calculate the correlation between the wave function's probability density and the prime distribution."""
wave_prob_density = np.abs(wavefunction) ** 2
correlation = np.corrcoef(wave_prob_density, prime_distribution)[0, 1]
return correlation
def visualize_and_output_results(modulus, V, wavefunctions, prime_distribution, correlation, energies):
"""Visualize the results and output detailed analysis."""
x = np.arange(modulus)
wave_prob_density = np.abs(wavefunctions[:, 0]) ** 2
# Plot the potential, wavefunction, and prime distribution
plt.figure(figsize=(14, 8))
plt.plot(x, V, label='Potential V(x)', color='red')
plt.plot(x, wave_prob_density, label='Wavefunction Probability Density |ψ(x)|^2', color='blue')
plt.bar(x, prime_distribution / prime_distribution.sum(), alpha=0.3, label='Normalized Prime Distribution', color='green')
plt.xlabel('Position x (Residue Class)')
plt.ylabel('Energy / Probability Density / Prime Count')
plt.title(f'Quantum Model for Prime Distribution Modulo {modulus}')
plt.legend()
plt.grid(True)
plt.show()
# Output the results
print(f"Modulus: {modulus}")
print(f"Correlation between wavefunction and prime distribution: {correlation:.4f}")
print(f"Energy levels (first 5): {energies[:5]}")
print(f"Prime Distribution: {prime_distribution}")
print(f"Wavefunction Probability Density: {wave_prob_density}")
print("-" * 50)
def main():
moduli = [6, 12, 18, 30] # Moduli to analyze
for modulus in moduli:
V = potential_function(modulus)
energies, wavefunctions = solve_schrodinger(modulus, V)
prime_distribution = compute_prime_distribution(modulus)
correlation = correlation_analysis(wavefunctions[:, 0], prime_distribution)
visualize_and_output_results(modulus, V, wavefunctions, prime_distribution, correlation, energies)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment