速查表

MATLAB 量子计算快速入门指南

示意图:桌面计算机通过 MATLAB 使用量子计算。

您可以使用 MATLAB Support Package for Quantum Computing 构建、仿真和运行量子算法。

单量子位门
对量子电路应用单量子位门。括号 () 中的数值是该门所作用的量子位索引。
  量子电路对象 绘图 矩阵
语法 >> qc=quantumCircuit(xGate(1))

>> plot(qc)

>> getMatrix(qc)
输出

NumQubits:1
Gates:[1×1 quantum.gate.SimpleGate]

单量子位门 描述

xGate(1)

xGate = 对量子位 1 绕 x 轴旋转 π

yGate(1)

yGate = 对量子位 1 绕 y 轴旋转 π

zGate(1)

zGate = 对量子位 1 绕 z 轴旋转 π

sGate(1)

sGate = 绕 z 轴正方向旋转 π/2

tGate(1)

tGate = 绕 z 轴正方向旋转 π/4

tiGate(1)

tiGate = 绕 z 轴负方向旋转 π/4

hGate(1)

hGate = 哈达玛门

idGate(1)

idGate = 单位门(不执行任何操作)

旋转门是接受两个参量的单量子位门。第一个参量是该门所作用的量子位索引,第二个参量是以弧度为单位的旋转角度或相位 (θ)

参数化单量子位门

描述

rxGate(1,pi/2)

rxGate = x 轴旋转门

ryGate(1,pi/2)

ryGate = y 轴旋转门

rzGate(1,pi/2)

rzGate = z 轴旋转门

r1Gate(1,pi/2)

r1Gate = 带全局相位的 z 轴旋转门

带一个控制量子位的门

对量子电路应用带一个控制量子位的门。这些门在括号 () 中有两个参量;第一个是控制量子位,第二个是目标量子位。如果控制量子位处于 |0> 态,则该门不执行任何操作。如果控制量子位处于 |1> 态,则指定的门作用于目标量子位。>> cxGate(control,target)

由一个作用于两个量子位的受控 X 门组成的量子电路图

量子位索引 1:控制量子位
量子位索引 2:目标量子位

受控旋转门是接受三个参量的双量子位门。第一个参量是控制量子位,第二个参量是目标量子位,第三个参量是以弧度为单位的旋转角度或相位 (θ)。

双量子位门

描述

cxGate(1,2)

cxGate 或 cnotGate = 如果量子位 1 处于 |1> 态,则对量子位 2 绕 x 轴旋转 π

cyGate(1,2)

cyGate = 如果量子位 1 处于 |1> 态,则对量子位 2 绕 y 轴旋转 π

czGate(1,2)

czGate = 如果量子位 1 处于 |1> 态,则对量子位 2 绕 z 轴旋转 π

chGate(1,2)

chGate = 受控哈达玛门

参数化双量子位门

描述

crxGate(1,2,pi/2)

crxGate = 受控 X 轴旋转门

cryGate(1,2,pi/2)

cryGate = 受控 y 轴旋转门

crzGate(1,2,pi/2)

crzGate = 受控 z 轴旋转门

cr1Gate(1,2,pi/2)

cr1Gate = 带全局相位的受控 z 轴旋转门

特殊门

门

描述

compositeGate (qc, [1,2])

从内部量子电路构造复合门,并返回 CompositeGate 对象。qc 是示例中的内部量子电路。

ccxGate(1,2,3)

双受控 X 门(CCNOT 或 Toffoli 门)

mcxGate(1:3,4,5)

多受控 X 门

第一个参量是三个控制量子位(1、2、3),第二个参量是一个目标量子位 (4),第三个参量是一个辅助量子位 (5)。该门基于控制量子位的状态对单个目标量子位进行操作,辅助量子位的数量确定简单门的数量

qftGate(1:3)

量子傅里叶变换 (QFT) 门

在以下门中,除 swapGate (接受两个参量)以外,第一个和第二个参量是量子位索引,第三个参量是相位 (θ)。对于以下所有门,交换两个目标量子位不会更改门的操作。

门

描述

rxxGate(1,2,pi/2)

Ising XX 耦合门

ryyGate(1,2,pi/2)

Ising YY 耦合门

rzzGate(1,2,pi/2)

Ising ZZ 耦合门

swapGate(1,2)

交换量子位的值。

量子电路操作

操作

示例

输出

plot = 绘制量子电路

>> gates=[hGate(1); cxGate(1,2)];

>> bell=quantumCircuit(gates, name="bell"); % 电路

>> plot(bell) % 绘图

inv = 量子电路或门的逆电路

>> bell_inverted=inv(bell);

plot(bell_inverted)

getMatrix = 量子电路或门的矩阵表示 >> getMatrix(bell)
量子电路或门的矩阵表示
generateQASM = 生成 QASM 代码 >> generateQASM(bell)

"OPENQASM 3.0;
include "stdgates.inc"; qubit[2] q; bit[2] c; h q[0]; cx q[0],q[1];
c=measure q;"

simulate(circuit, inputState), 对电路进行仿真并指定电路的初始量子状态,返回 QuantumState 对象 >> simulate(bell)

BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits:2

unpack = 展开量子电路内部的复合门

>> not_custom=[cxGate(1,2)];

>> qc_inner=quantumCircuit(cnot_custom);

>> gates_appended=[hGate(1) compositeGate(qc_inner,[1 2]) compositeGate(qc_inner,[2 3])];

>> circ=quantumCircuit(gates_appended);

>> plot(circ) % 已打包的复合门

>> plot(unpack(circ, "recursive"))

仿真的量子电路操作

操作

示例

输出

初始化电路的量子状态,其中量子位 1(电路图中的顶部量子位)设置为 |1>,第二个设置为 |0>

S=simulate(bell,"10")

QuantumState with properties:
BasisStates: [4×1 string]
Amplitudes: [4×1 double]
NumQubits:2

显示输出基态及其振幅

S.BasisStates
S.Amplitudes

BasisStates:"00" "01" "10" "11"
Amplitudes:0.7071 0 0 -0.7071

显示电路的最终状态,例如用于表示每个量子位的基

f=formula(S)

f2=formula(S,Basis="X")

ans = "0.70711 * |00> + -0.70711
* |11>"
ans = "0.70711 * |+-> + 0.70711 *
|-+>"

显示可能的状态以及测量到每个状态的概率

[states,P]=querystates(S)

states = "00"   P= 0.5
    "11"          0.5
以任意次数对电路的量子状态进行随机采样

M=randsample(S,50);
T=table(M.Counts,M.Probabilities,M.MeasuredStates,

VariableNames=["Counts",
"\{*}Probabilities\{*}", "States"])

ans =
2×3 table
Counts Probabilities States
28        0.56         "00"
22        0.44         "11"

函数

描述

dev=QuantumDeviceAWS("SV1", Region=reg, S3Path=bucketPath)

连接到 Amazon Braket 设备,指定设备名称、区域和要存储结果的 S3 存储桶路径

dev=QuantumDeviceIBM("ibmq_qasm_simulator", ...AccountName=myAccountName, FileName=myFileName);

连接到 IBM 量子设备,指定设备名称和帐户凭据

fetchDetails(device)

获取关于该设备的其他信息

task=run(circuit, dev);

创建一个任务以在设备上运行该电路

wait(task)

检查任务的状态

meas=fetchOutput(task);

检索电路运行的结果

>> 可视化

Matrix representation of |0>

is [1;0] >> plotBlochSphere([1;0])

>> plot(qftGate(1:3))

>> histogram(states)

>> GitHub 上的示例