QPanda3
Supported by OriginQ
载入中...
搜索中...
未找到
态矢量

上一章: 密度矩阵
下一章: Kraus


简介

态矢量是量子力学中的核心概念,用于抽象地表示量子系统的量子态。以下是对量子领域中态矢量的详细介绍:

定义与数学空间

定义

量子态由希尔伯特空间中的向量表示,也称为状态向量空间或状态空间,这些向量称为状态向量或态矢量。

数学空间

状态向量存在于内积空间中。内积空间是带有额外内积结构的向量空间。状态向量满足所有向量空间的公理,并允许进行内积运算。

性质与特征

单位向量

状态向量的范数为 1,因此是单位向量。 线性组合:每个内积空间都有一个单范数正交基,态矢量是所有单范数正交基向量的线性组合。

状态的叠加原理

态矢量满足线性性质,这对应于量子力学中的状态叠加原理。也就是说,如果两个量子态分别由态矢量 \(\mathcal{ \psi } _1\) 和 \(\mathcal{ \psi } _2\) 表示,则它们的叠加态可以由这两个态矢量的线性组合表示。

概率分布

状态向量可以被视为概率分布,描述了量子系统所有可能的测量结果。对于每次测量,获得不同结果的概率是确定的,并且这些结果的概率分布取决于系统的态矢量。

在 QPanda3 量子信息模块中

QPanda3 在量子信息模块中使用 StateVector 类来抽象和模拟态矢量。

构造 StateVector 对象

API文档链接

默认构造函数

默认会为仅包含一个量子比特且当前状态全为 0 的量子系统构造一个状态向量。

在内部张量积运算中,具有较大索引值的量子比特作为左操作数。例如,在对由 \(q[0]\)、 \(q[1]\) 和 \(q[2]\) 组成的量子系统执行张量积运算时,结果为 \(\left | q[2] \right \rangle \otimes \left | q[1] \right \rangle \otimes \left | q[0] \right \rangle \)

输出

[1.+0.j 0.+0.j]

指定量子比特总数

指定量子系统中量子比特的总数,并生成一个StateVector对象,其中每个量子比特的当前状态为 0。

对于内部张量积操作,较大值的量子比特索引作为左操作数。例如,当对由 \(q[0]\)、 \(q[1]\) 和 \(q[2]\) 组成的量子系统执行张量积操作时,结果为 \(\left | q[2] \right \rangle \otimes \left | q[1] \right \rangle \otimes \left | q[0] \right \rangle \)。

输出

[1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]

复数数组作为构造函数的入参

根据给定的复数数组构造一个StateVector对象。如果给定的复数数组不满足归一化约束,它将被自动归一化。如果给定的复数数组的元素数量不是 2 的幂,它将被自动扩展为 2 的幂。此扩展操作将尽可能少地扩展元素数量。

对于内部张量积操作,较大值的量子比特索引作为左操作数。例如,当对由 \(q[0]\)、 \(q[1]\) 和 \(q[2]\) 组成的量子系统执行张量积操作时,结果为 \(\left | q[2] \right \rangle \otimes \left | q[1] \right \rangle \otimes \left | q[0] \right \rangle \)。

输出

[0.04950738+0.04950738j 0.09901475+0.09901475j 0.14852213+0.14852213j
0.19802951+0.19802951j 0.24753689+0.24753689j 0.29704426+0.29704426j
0.34655164+0.34655164j 0.39605902+0.39605902j]
[0.04950738+0.04950738j 0.09901475+0.09901475j 0.14852213+0.14852213j
0.19802951+0.19802951j 0.24753689+0.24753689j 0.29704426+0.29704426j
0.34655164+0.34655164j 0.39605902+0.39605902j]

通过Python字典构造

根据输入的Python字典构造一个StateVector对象。

字典的键是自然数,表示量子态的索引;字典的值是对应的振幅。如果不满足归一化约束,将自动进行归一化处理。如果给定字典元素的键的最大值不是 2 的幂,它将自动扩展为 2 的幂。此扩展操作将尽可能少地扩展元素数量。

对于内部张量积操作,较大值的量子比特索引作为左操作数。例如,当对由 \(q[0]\)、 \(q[1]\) 和 \(q[2]\) 组成的量子系统执行张量积操作时,结果为 \(\left | q[2] \right \rangle \otimes \left | q[1] \right \rangle \otimes \left | q[0] \right \rangle \)。

输出

[0. +0.j 0.13867505+0.13867505j 0. +0.j
0.41602515+0.41602515j 0.5547002 +0.5547002j 0. +0.j
0. +0.j 0. +0.j ]

获取内部数据

获取 numpy.ndarray形式的内部数据

以 numpy.ndarray 的形式获取所有内部数据。

StateVector.ndarray的API文档链接

输出

data: [0. +0.j 0.13867505+0.13867505j 0. +0.j
0.41602515+0.41602515j 0.5547002 +0.5547002j 0. +0.j
1. +0.j 0. +0.j ]

获取单个元素

通过索引获取某个状态对应的值。

StateVector.dim的API文档链接

StateVector.at的API文档链接

输出

element in stv:
0j
(0.1386750490563073+0.1386750490563073j)
0j
(0.41602514716892186+0.41602514716892186j)
(0.5547001962252291+0.5547001962252291j)
0j
0j
0j

使用量子线路进行演化

无更新演化

使用量子线路 QCircuit 对量子态进行演化,而不更新原始 StateVector 对象的内部数据,结果将作为新的 StateVector 对象返回。

StateVector.evolve的API文档链接

输出:

stv2: [0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]

演化并更新

使用量子线路 QCircuit 对量子态进行演化,并更新原始 StateVector 对象的内部数据。

StateVector.update_by_evolve的API文档链接

输出:

stv2: [0.+0.j 1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]

密度矩阵

获取对应的密度矩阵表示。

StateVector.get_density_matrix的API文档链接

输出:

dm: [[0. +0.j 0. +0.j 0. +0.j 0. +0.j
0. +0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0.03846154+0.j 0. +0.j 0.11538462+0.j
0.15384615+0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j 0. +0.j
0. +0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0.11538462+0.j 0. +0.j 0.34615385+0.j
0.46153846+0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0.15384615+0.j 0. +0.j 0.46153846+0.j
0.61538462+0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j 0. +0.j
0. +0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j 0. +0.j
0. +0.j 0. +0.j 0. +0.j 0. +0.j]
[0. +0.j 0. +0.j 0. +0.j 0. +0.j
0. +0.j 0. +0.j 0. +0.j 0. +0.j]]

纯度

获取对应的纯度值。

StateVector.purity的API文档链接

输出:

purity: (1+0j)

布尔函数

合法性检查

判断内部数据是否合法。

StateVector.is_valid的API文档链接

输出:

res: True

判等

判断两个状态向量的内部数据在默认容差范围内是否相等。

API文档链接

输出:

res: True