You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数内for循环无法遍历变量,CHSH不等式计算结果异常

问题分析与修复

核心错误点

你的Obs函数存在两个致命问题:

  1. 传入参数被覆盖:函数内部的for a in range(1,N_A)和for b in range(1,N_B)重新定义了变量a和b,直接覆盖了你调用函数时传入的具体参数值(比如Obs(2,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:10:21