53 lines
1.9 KiB
Python
53 lines
1.9 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 d_A values, with fixed alpha and d_B Note, d_B>d_A
|
|
"""
|
|
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from quantum_states import sample_and_calculate
|
|
from tqdm import tqdm
|
|
|
|
# Set dimensions
|
|
db = 32
|
|
alpha = 0
|
|
da_range = np.arange(2, 10, 1) # Range of d_A values to plot
|
|
n_samples = 1000000
|
|
|
|
plt.figure(figsize=(10, 6))
|
|
|
|
predicted_probabilities = []
|
|
actual_probabilities = []
|
|
|
|
for da in tqdm(da_range, desc="Processing d_A values"):
|
|
# Calculate beta according to the formula
|
|
beta = da / (np.log(2) * db)
|
|
|
|
# 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)
|
|
count = np.sum(entropies < np.log2(da) - alpha - beta)
|
|
# early stop if count is 0
|
|
if count != 0:
|
|
actual_probabilities.append(count / n_samples)
|
|
else:
|
|
actual_probabilities.extend([np.nan] * (len(da_range) - len(actual_probabilities)))
|
|
break
|
|
# debug
|
|
print(f'da={da}, theoretical_prob={prob}, threshold={np.log2(da) - alpha - beta}, actual_prob={actual_probabilities[-1]}, entropy_heads={entropies[:10]}')
|
|
|
|
# plt.plot(da_range, predicted_probabilities, label=f'$d_A={da}$', linestyle='--')
|
|
plt.plot(da_range, actual_probabilities, label=f'$d_A={da}$', linestyle='-')
|
|
|
|
plt.xlabel(r'$d_A$')
|
|
plt.ylabel('Probability')
|
|
plt.title(r'$\operatorname{Pr}[H(\psi_A) < \log_2(d_A)-\alpha-\beta]$ vs $d_A$ for fixed $\alpha=$'+str(alpha)+r' and $d_B=$' +str(db)+ r' with $n=$' +str(n_samples))
|
|
# plt.legend()
|
|
plt.grid(True)
|
|
plt.yscale('log') # Use log scale for better visualization
|
|
plt.show()
|