$\newcommand{\ket}[1]{|{#1}\rangle}\newcommand{\bra}[1]{\langle{#1}|}$Considere el ejemplo anterior de la transmisión de un fotón por una línea óptica:
Ésta se puede modelar como $U_{\alpha}$ donde $\alpha$ se corresponde con el ángulo de rotación de polarización: \begin{align*} U_{\alpha} = \left[\begin{matrix} \cos(\alpha)& -\sin(\alpha)\\\sin(\alpha)& \cos(\alpha) \end{matrix}\right]. \end{align*}
import numpy as np
def fibra(alpha): # Transformación unitaria de una fibra optica
U = np.array([[np.cos(alpha), -np.sin(alpha)], [np.sin(alpha), np.cos(alpha)]])
return U
print("Comprobamos que U_{-alpha} es de hecho la inversa de U_{alpha}:\n")
alpha = 0.2;
Ua = fibra(alpha)
U_a = fibra(-alpha)
print("Ua =\n", str(Ua), "\n\nU_a =\n", str(U_a))
print("\nUa @ U_a =\n", Ua @ U_a)
print("\nU_a @ Ua =\n", U_a @ Ua)
Comprobamos que U_{-alpha} es de hecho la inversa de U_{alpha}:
Ua =
[[ 0.98006658 -0.19866933]
[ 0.19866933 0.98006658]]
U_a =
[[ 0.98006658 0.19866933]
[-0.19866933 0.98006658]]
Ua @ U_a =
[[ 1.00000000e+00 -1.23079293e-17]
[-1.23079293e-17 1.00000000e+00]]
U_a @ Ua =
[[1.00000000e+00 1.23079293e-17]
[1.23079293e-17 1.00000000e+00]]
def foton(theta): # Matriz de densidad de probabilidad de un foton polarizado
ket_theta = np.array([np.cos(theta), np.sin(theta)])
rho = np.outer(ket_theta, ket_theta)
return rho
print("Fibra que introduce una rotación aleatoria:\n\n")
rho = foton(0)
U = fibra(2*np.pi*np.random.rand())
sigma = U @ rho @ U.conj().T
print("\nrho =\n", str(rho), "\n\nU =\n", str(U), "\n\nsigma =\n", str(sigma))
Fibra que introduce una rotación aleatoria: rho = [[1. 0.] [0. 0.]] U = [[ 0.01240582 0.99992304] [-0.99992304 0.01240582]] sigma = [[ 1.53904362e-04 -1.24048650e-02] [-1.24048650e-02 9.99846096e-01]]