2017-09-20 3 views
4

J'essaye actuellement de coder l'algorithme de Deutsch et de lutter avec la façon de mesurer le | x> qubit. La lecture du example here a aidé mais ne résout pas mon problème fondamental. En utilisant le diagramme suivant comme base pour présenter mon problème, au moment où ils proposent la deuxième transformation d'Hadamard, j'ai toujours mes informations codées comme un vecteur de probabilités correspondant à | 00>, | 01>, | 10> et | 11>.Codage Deutsch Algorithme

Deutsch Algorithm Diagram

Tout ce que j'ai lu suggère que tout ce que je fais est de prendre les 2 premières valeurs (comme ils correspondent au premier qubit) et d'appliquer la transformation Hadamard, et voir si elle est un zéro ou un mais cela ne semble pas fonctionner. Quelqu'un a-t-il mis cela en place et a-t-il des conseils sur la façon d'y parvenir? Je codage actuellement Python en utilisant Numpy et voici ce que j'ai:

x = np.array([[1], [0]]) 
y = np.array([[0], [1]]) 
h = calc_hadamard(1) 

phi2 = np.kron(h.dot(x), h.dot(y)) 

constantF = np.array([[1, 0, 0, 0], 
         [0, 1, 0, 0], 
         [0, 0, 1, 0], 
         [0, 0, 0, 1]]) 

balancedF = np.array([[1, 0, 0, 0], 
         [0, 1, 0, 0], 
         [0, 0, 0, 1], 
         [0, 0, 1, 0]]) 

print(constantF.dot(phi2)) 
print(balancedF.dot(phi2)) 

Si ce qui est émis par les fonctions d'impression est

  • (0,5, -0,5, 0,5, -0,5), et
  • (0,5, -0,5, -0,5, 0,5)

Comme je l'espère devrait être évident, voici ce qui est prévu, mais effectuer une transformation Hadamard ultérieure sur les deux premières valeurs donne la même réponse. Qu'est-ce que j'oublie ici?

Répondre

2

Tout ce que j'ai lu suggère que tout ce que je fais est de prendre le top 2 valeurs (comme ils correspondent au premier qubit) et appliquer la Hadamard,

Non, ce n'est pas ce que vous faites . Vous devez appliquer l'opération Hadamard à la paire supérieure et à la paire inférieure. De manière équivalente, vous devez étendre la matrice Hadamard à 1 bit pour l'appliquer au système à 2 bits en la tendant avec une opération d'identité pour l'autre qubit:

phi3 = constantF.dot(phi2) # or balancedF 
h_on_1_for_2 = np.kron(np.eye(2), h) 
phi4 = np.dot(h_on_1_for_2, phi3)