Qiskit中cu()函数报错:缺少必需参数'target_qubit'求助
问题解决:
cu() 参数缺失报错与参数疑问解答 一、报错原因与修复
你的报错核心是Qiskit中cu()方法的参数数量和顺序不符合要求。Qiskit的cu门完整参数签名为:
circuit.cu(theta, phi, lam, gamma, control_qubit, target_qubit)
必须传入4个相位参数(theta/phi/lam/gamma),再依次传入控制量子位、目标量子位。
你写的circuit.cu(-pi/2, -pi/2, pi/2, 1, 3)只传了3个相位参数,程序会把1误判为第四个相位参数gamma,把3当成控制位,最终缺少目标位参数,因此触发missing required positional argument: 'target_qubit'报错。
修复示例
如果不需要额外全局相位,直接将gamma设为0即可:
# 正确调用:补充gamma参数(设为0) circuit.cu(-pi/2, -pi/2, pi/2, 0, 1, 3)
你的测试代码中circuit.cu(-pi/2, -pi/2, pi/2,0, 1, 3)是正确的,但另一条circuit.cu(-pi/2, 0 , 0, 3,2, 1)参数顺序错误,应调整为:
# theta=-pi/2, phi=0, lam=0, gamma=0,控制位2,目标位1 circuit.cu(-pi/2, 0, 0, 0, 2, 1)
另外,你代码里的circuit.cu3(-pi/2, 2, 1)也存在参数缺失问题,cu3是旧版受控U门,参数为cu3(theta, phi, lam, control, target),正确写法示例:
circuit.cu3(-pi/2, 0, 0, 2, 1) # 补充phi和lam参数
二、cu门参数疑问解答
Qiskit的cu门包含4个相位参数,其中:
theta/phi/lam是U门的核心旋转参数,直接决定门的量子态变换效果,对应单量子位U门U(theta, phi, lam)的三个旋转角度;gamma是全局相位,量子力学中全局相位不会影响测量结果(测量仅依赖概率幅的模长平方),因此实际计算中它不会改变电路输出。但它是门数学定义的一部分,Qiskit保留该参数是为了保证门定义的完整性。
这就是为什么你会觉得“只有三个有效参数”——gamma无实际观测效果,但语法上必须传入它,才能让程序正确识别后续的控制位和目标位。
内容的提问来源于stack exchange,提问作者rat fat
相关产品推荐
相关产品推荐

