函数内for循环无法遍历变量,CHSH不等式计算结果异常
问题分析与修复
核心错误点
你的Obs函数存在两个致命问题:
- 传入参数被覆盖:函数内部的
for a in range(1,N_A)和for b in range(1,N_B)重新定义了变量a和b,直接覆盖了你调用函数时传入的具体参数值(比如Obs(2,2)里的2和2)。 - 循环提前终止:第一次循环迭代就执行
return ob,导致函数只会计算a=1、b=1的观测值——不管你传入什么参数,返回结果全是同一个值。
修复后的代码
删除Obs函数里多余的嵌套循环,直接根据传入的a和b计算对应观测值即可:
#chsh import numpy as np from bell_state import bell_state from pauli import pauli #setup of measurement N_A = 2 #measurement outcomes N_B = 2 #Bell_state used rho = bell_state(1) #Alice A_1 =pauli('Z') A_2 =pauli('X') #Bob B_1 =(1/np.sqrt(2))*(pauli('Z')+pauli('X')) B_2 =(1/np.sqrt(2))*(pauli('Z')-pauli('X')) def AB(a,b): if a==1 and b==1: aabb = np.kron(A_1,B_1) elif a==2 and b==1: aabb = np.kron(A_2,B_1) elif a==1 and b==2: aabb = np.kron(A_1,B_2) elif a==2 and b==2: aabb = np.kron(A_2,B_2) else: print('error') return aabb # 修复后的Obs函数 def Obs(a,b): ob = np.trace(np.dot(AB(a,b), rho)) return ob IObs = Obs(1,1) + Obs(1,2) + Obs(2,1) - Obs(2,2) # 打印验证结果 print(f"Obs(1,1) : {Obs(1,1)}") print(f"Obs(2,1) : {Obs(2,1)}") print(f"Obs(1,2) : {Obs(1,2)}") print(f"Obs(2,2) : {Obs(2,2)}") print(f"\nIObs : \n {IObs}")
修复后输出结果
运行代码会得到你手动计算的正确结果:
Obs(1,1) : 0.7071067811865475 Obs(2,1) : 0.7071067811865475 Obs(1,2) : 0.7071067811865475 Obs(2,2) : -0.7071067811865475 IObs : 2.82842712474619
内容的提问来源于stack exchange,提问作者mike3alpha
相关产品推荐
相关产品推荐

