Skip to content

PySparq 量子计算教程 - 量子态与基本量子门

量子态与量子寄存器

SparseState 对象

量子态在 PySparq 中表示为 SparseState 对象,包含以下核心信息: - 量子系统的全部状态信息 - 量子寄存器的类型配置 - 各个量子态分量的振幅和基矢表示

添加量子寄存器

使用 AddRegister 方法添加量子寄存器:

r1 = spq.AddRegister(
    name='reg1',          # 寄存器名称(字符串)
    type=spq.UnsignedInteger,  # 数据类型(见下文说明)
    size=4               # 量子比特数量(最多64)
)(state)                 # 作用到量子态对象

数据类型说明

类型 说明
UnsignedInteger 无符号整数
SignedInteger 有符号整数
General 通用寄存器
FixedPoint 定点数

数据类型的影响: 1. 量子态显示格式 2. 保证量子操作的类型安全

量子门操作

基本使用流程

量子门操作分为两个阶段:

# 阶段一:构造量子门
op = spq.Hadamard_Int_Full(r1)

# 阶段二:施加到量子态
op(state)

# 简写形式
spq.Hadamard_Int_Full(r1)(state)

常用量子门类型

门类型 作用说明
*_Int_Full 作用于寄存器的所有量子比特
*_Bool 作用于单个量子比特

完整示例教程

初始化量子系统

import pysparq as spq

# 创建初始量子态
state = spq.SparseState()

# 添加第一个寄存器
r1 = spq.AddRegister(
    name='reg1',
    type=spq.UnsignedInteger,
    size=4
)(state)

# 添加第二个寄存器
r2 = spq.AddRegister(
    name='reg2',
    type=spq.UnsignedInteger,
    size=3
)(state)

查看初始态

spq.StatePrint(disp=spq.StatePrintDisplay.Detail)(state)

输出结果:

StatePrint (mode=Detail)
|(0)reg1 : UInt4 | |(1)reg2 : UInt3 | 
1.000000+0.000000i  reg1=|0> reg2=|0>

理论上: \(\(\ket{\psi_0}=\ket{0}_{\mathrm{reg1}} \otimes \ket{0}_{\mathrm{reg2}}\)\)

施加Hadamard门操作

spq.Hadamard_Int_Full(r1)(state)

此时量子态展开为16个等幅分量:

0.250000+0.000000i  reg1=|0> reg2=|0>
0.250000+0.000000i  reg1=|1> reg2=|0>
...(共16个分量)...
0.250000+0.000000i  reg1=|14> reg2=|0>
0.250000+0.000000i  reg1=|15> reg2=|0>

理论上:

\[\begin{aligned} \ket{\psi_1}&=H_{\mathrm{reg1}}^{\otimes 4}\ket{\psi_0}\\ &=\frac{1}{4}\sum_{i=0}^{15}\ket{i}_{\mathrm{reg1}}\otimes \ket{0}_{\mathrm{reg2}} \end{aligned}\]

单比特门操作示例

# X门作用于reg2的第0位
spq.Xgate_Bool(r2, 0)(state)

# Y门作用于reg2的第1位
spq.Ygate_Bool(r2, 1)(state)

最终量子态显示:

0.000000+0.250000i  reg1=|0> reg2=|3>
0.000000+0.250000i  reg1=|1> reg2=|3>
...(所有分量的reg2值变为3)...
0.000000+0.250000i  reg1=|14> reg2=|3>
0.000000+0.250000i  reg1=|15> reg2=|3>

理论上:

\[\begin{aligned} \ket{\psi_2}&=Y_{\mathrm{reg2}[1]}X_{\mathrm{reg2}[0]}\ket{\psi_1}\\ &=Y_{\mathrm{reg2}[1]} \frac{1}{4}\sum_{i=0}^{15}\ket{i}_{\mathrm{reg1}}\otimes \ket{0001}_{\mathrm{reg2}}\\ &=\frac{i}{4}\sum_{i=0}^{15}\ket{i}_{\mathrm{reg1}}\otimes \ket{0011}_{\mathrm{reg2}} \end{aligned}\]

其中\(X_{\mathrm{reg2}[0]}\)表示作用在reg2寄存器的qubit 0上的X门操作,\(Y_{\mathrm{reg2}[1]}\)表示作用在reg2寄存器的qubit 1上的Y门操作。