%matplotlib inline
#from IPython.display import display
import matplotlib.pyplot as plt
import numpy as np
from numpy.linalg import eig
from qutip import *
plt.rcParams["figure.figsize"] = (12,9)
# Define the Phv measurement operator:
MOpz= sigmaz()
MOpx= sigmax()
MOpy= sigmay()
ψ = ((2-1j)*basis(2,0)+(1-3j)*basis(2,1)).unit()
ψ2=(basis(2,0)+basis(2,1)).unit()
ψ3=basis(2,0)
def GenerateLabResults(N):
state=((np.random.random()+1j*np.random.random())*basis(2,0)+(np.random.random())*basis(2,1)).unit()
oper=[0.5*sigmax(), 0.5*sigmay(), 0.5*sigmaz()]
data=[]
for k in oper:
eigenv1 = k.eigenstates()[1][0]
eigenv2 = k.eigenstates()[1][1]
allowed_results = k.eigenstates()[0]
probability_amps = [qo.full()[0][0] for qo in [eigenv1.dag()*state, eigenv2.dag()*state]]
pvals = [abs(pa.conjugate()*pa) for pa in probability_amps]
dataK=np.random.choice(allowed_results,size=N, p=pvals)
data.append(dataK)
return data
datax,datay,dataz=GenerateLabResults(1000000)
sx=datax.mean()
sy=datay.mean()
sz=dataz.mean()
print("Variance: ",datax.var())
print("Mean: ",datax.mean())
print(sx)
Variance: 0.008068821775000002
Mean: 0.491865
0.491865
print("Variance: ",datay.var())
print("Mean: ",datay.mean())
Variance: 0.24982917510000005
Mean: -0.01307
print("Variance: ",dataz.var())
print("Mean: ",dataz.mean())
Variance: 0.242297480304
Mean: -0.087764
plt.hist(np.real(datax))
plt.hist(np.real(datay))
plt.hist(np.real(dataz))
from qutip.ipynbtools import version_table
version_table()
alpha=np.sqrt(1/2+sz)
beta=np.sqrt(1/2-sz)
phicos=np.arccos(sx/(alpha*beta))
phisen=-np.arcsin(sy/(alpha*beta))
print("α =",alpha)
print("β =",beta)
α = 0.6420560723176754
β = 0.7666576811067636
print("Φ =", phicos)
print("Φ =", phisen)
Φ = 0.038891503279807185
Φ = 0.02655535936738083
Npoints=1000000
#datax
#datay
#dataz
#para ver la tendencia vamos a calcular la media de los ppuntos para los primeros putnos
Nmedidas=500
divisionsize=10
nresults=np.linspace(divisionsize, Nmedidas*divisionsize, Nmedidas)
#calculo de la media de x
Meanx=datax.mean()
Varx=datax.var()
dispmeanx=np.zeros(Nmedidas)
for i in range(500):
Nmean=int(nresults[i])
#second
dispmeanx[i]=np.abs(datax[:Nmean].mean()-Meanx)
#plt.ylin[0,0.03]
plt.plot(nresults, dispmeanx, label='$X_n-\\mu_x$')
#plt.plot(nresults, np.sqrt(Varx/nresults), label='$\sqrt{Var(x)/n}$')
# me he quedado aqui, me faltan leyendas y ejes
plt.xlabel('Numero de medidas')
plt.ylabel('Error expected value')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
#No es buena medida del error porque no conozco mu y me sale distinto en cada medida que hago
Npoints=1000000
Nmedidas=500
divisionsize=10
nresults=np.linspace(divisionsize, Nmedidas*divisionsize, Nmedidas)
#calculo de la media de x
Meanx=datax.mean()
Varx=datax.var()
dispmeanx=np.zeros(Nmedidas)
errorx=np.zeros(Nmedidas)
for i in range(len(nresults)):
Nmean=int(nresults[i])
#second
dispmeanx[i]=np.abs(datax[:Nmean].mean()-Meanx)
Numeropaquetes=int(Npoints/Nmean)
avmeanx=np.zeros(Numeropaquetes)
for j in range(Numeropaquetes):
avmeanx[j]=datax[j*Nmean:(j+1)*Nmean].mean()
errorx[i]=np.sqrt(avmeanx.var())
plt.ylim(0,0.03)
plt.plot(nresults, dispmeanx, label='$X_n-\\mu_x$')
plt.plot(nresults,errorx,label='$Var(\overline{X}_n)$')
plt.xlabel('Numero de medidas')
plt.ylabel('Error expected value')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
Npoints=1000000
Nmedidas=500
divisionsize=10
nresults=np.linspace(divisionsize, Nmedidas*divisionsize, Nmedidas)
#calculo de la media de x
Meanx=datax.mean()
Varx=datax.var()
dispmeanx=np.zeros(Nmedidas)
errorx=np.zeros(Nmedidas)
for i in range(len(nresults)):
Nmean=int(nresults[i])
#second
dispmeanx[i]=np.abs(datax[:Nmean].mean()-Meanx)
Numeropaquetes=int(Npoints/Nmean)
avmeanx=np.zeros(Numeropaquetes)
for j in range(Numeropaquetes):
avmeanx[j]=datax[j*Nmean:(j+1)*Nmean].mean()
errorx[i]=np.sqrt(avmeanx.var())
plt.ylim(0,0.03)
plt.plot(nresults, dispmeanx, label='$X_n-\\mu_x$')
plt.plot(nresults,errorx,label='$Var(\overline{X}_n)$')
plt.plot(nresults,np.sqrt(Varx/nresults), label='$\sqrt{Var(\overline{X_N})/N)}$')
plt.xlabel('Numero de medidas')
plt.ylabel('Error expected value')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
#Función que devuelve el vector obtenido tras aplicar un operador sobre un vector.
def vmedio(A,v):
return expect(A,v)
#Función que devuelve la incertidumbre asociada a un cierto operador ΔA
def delta(A,v):
return np.sqrt(np.abs(variance(A,v)))
#Definición de los operadores y estados que nos da el enunciado
Psi1=basis(2,1)
Psi2=(0.236-0.471j)*basis(2,0)+(0.471-0.707j)*basis(2,0)
Psi3=np.sqrt(1/2)*(basis(2,0)-basis(2,1))
A=sigmax()
B=sigmay()
Conm=-1j*(A*B-B*A)
#Definición de una función que devuelve true si se verifica la desigualdad o false en caso contrario
#en función de los operadores y estados que se le quiera transmitir.
def comprobacion(deltaA,deltaB,Psi):
if (deltaA*deltaB>=np.abs(1/2*vmedio(Conm,Psi))):
return True
else:
return False
print(comprobacion(delta(A,Psi1),delta(B,Psi1),Psi1))
print(comprobacion(delta(A,Psi2),delta(B,Psi2),Psi2))
print(comprobacion(delta(A,Psi3),delta(B,Psi3),Psi3))
True
True
True
plus=basis(2,0)
print("ψ=",plus)
print("Autovalor=",vmedio(sigmaz(),plus))
print("Δσz=",delta(sigmaz(),plus))
ψ= Quantum object: dims = [[2], [1]], shape = (2, 1), type = ket
Qobj data =
[[1.]
[0.]]
Autovalor= 1.0
Δσz= 0.0