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
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?