49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
"""
|
|
plot the probability of the entropy of the reduced density matrix of the pure state being greater than log2(d_A) - alpha - beta
|
|
for different alpha values
|
|
|
|
IGNORE THE CONSTANT C
|
|
|
|
NOTE there is bug in the program, You should fix it if you want to use the visualization, it relates to the alpha range and you should not plot the prob of 0
|
|
"""
|
|
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from quantum_states import sample_and_calculate
|
|
from tqdm import tqdm
|
|
|
|
# Set dimensions
|
|
db = 16
|
|
da_values = [8, 16, 32]
|
|
alpha_range = np.linspace(0, 2, 100) # Range of alpha values to plot
|
|
n_samples = 100000
|
|
|
|
plt.figure(figsize=(10, 6))
|
|
|
|
for da in tqdm(da_values, desc="Processing d_A values"):
|
|
# Calculate beta according to the formula
|
|
beta = da / (np.log(2) * db)
|
|
|
|
# Calculate probability for each alpha
|
|
predicted_probabilities = []
|
|
actual_probabilities = []
|
|
for alpha in tqdm(alpha_range, desc=f"Calculating probabilities for d_A={da}", leave=False):
|
|
# Calculate probability according to the formula
|
|
# Ignoring constant C as requested
|
|
prob = np.exp(-(da * db - 1) * alpha**2 / (np.log2(da))**2)
|
|
predicted_probabilities.append(prob)
|
|
# Calculate actual probability
|
|
entropies = sample_and_calculate(da, db, n_samples=n_samples)
|
|
actual_probabilities.append(np.sum(entropies > np.log2(da) - alpha - beta) / n_samples)
|
|
|
|
# plt.plot(alpha_range, predicted_probabilities, label=f'$d_A={da}$', linestyle='--')
|
|
plt.plot(alpha_range, actual_probabilities, label=f'$d_A={da}$', linestyle='-')
|
|
|
|
plt.xlabel(r'$\alpha$')
|
|
plt.ylabel('Probability')
|
|
plt.title(r'$\operatorname{Pr}[H(\psi_A) <\log_2(d_A)-\alpha-\beta]$ vs $\alpha$ for different $d_A$')
|
|
plt.legend()
|
|
plt.grid(True)
|
|
plt.yscale('log') # Use log scale for better visualization
|
|
plt.show()
|