Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编码Deutsch算法_Python_Algorithm_Numpy_Quantum Computing - Fatal编程技术网

Python 编码Deutsch算法

Python 编码Deutsch算法,python,algorithm,numpy,quantum-computing,Python,Algorithm,Numpy,Quantum Computing,我目前正在尝试编写Deutsch算法,并努力研究如何测量| x>量子位。阅读这本书有帮助,但不能解决我的根本问题 在他们提出第二个阿达玛变换时,我仍然将我的信息编码为对应于| 00>、|01>、|10>和| 11>的概率向量,以下图为基础来展示我的问题 我所读到的一切都表明,我所做的就是取前2个值(因为它们对应于第一个量子位)并应用哈达玛变换,然后看看它是零还是一,但这似乎不起作用。是否有人实施了这一点,并就如何实际实现这一点提出了建议?我目前正在使用Numpy用Python编写代码,以下是我

我目前正在尝试编写Deutsch算法,并努力研究如何测量| x>量子位。阅读这本书有帮助,但不能解决我的根本问题

在他们提出第二个阿达玛变换时,我仍然将我的信息编码为对应于| 00>、|01>、|10>和| 11>的概率向量,以下图为基础来展示我的问题

我所读到的一切都表明,我所做的就是取前2个值(因为它们对应于第一个量子位)并应用哈达玛变换,然后看看它是零还是一,但这似乎不起作用。是否有人实施了这一点,并就如何实际实现这一点提出了建议?我目前正在使用Numpy用Python编写代码,以下是我所拥有的:

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))
这些打印函数的输出是什么

(0.5, -0.5, 0.5, -0.5), and
(0.5, -0.5, -0.5, 0.5)
  • (0.5、-0.5、0.5、-0.5)和
  • (0.5,-0.5,-0.5,0.5)
很明显,这是预期的结果,但对前两个值执行后续的阿达玛变换会给出相同的答案。我错过了什么

我所读到的一切都表明我所做的就是取前2个值(因为它们对应于第一个量子位)并应用哈达玛变换

不,你不是这样做的。必须对顶部对和底部对应用Hadamard操作。等效地,你必须通过将1量子位的阿达玛矩阵与另一量子位的恒等式运算一起张紧,来扩展1量子位的阿达玛矩阵,以应用于2量子位系统:

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)
这些打印函数的输出是什么

(0.5, -0.5, 0.5, -0.5), and
(0.5, -0.5, -0.5, 0.5)
这的确是正确的。如果我们使用狄拉克符号和2量子位状态的因子来写这些向量,它给出:

  • 1/2(|00>-|01>+|10>-|11>)=1/2(|0>+|1>)(|0>-|1>)
    ,用于常数情况
  • 1/2(|00>-|01>-|10>+|11>)=1/2(|0>-|1>)(|0>-|1>)
    ,用于平衡情况
正如Deutsch算法()中所预期的那样,我们可以对第二个寄存器进行树输出(删除),并对第一个寄存器应用Hadamard。它给

  • H(|0>+|1>)=|0>
    对于常数情况
  • H(|0>-|1>)=|1>
    用于平衡情况
您所犯的错误是,我们需要应用Hadamard then measure的第一个寄存器与您所称的前两个值不对应。我们需要回到Dirac符号,首先将全局状态作为两个寄存器的张量积(Kronecker积)进行因子化