布洛赫球#
单比特量子态#
与经典比特不一样的是,量子比特可以同时处于计算基矢 \(\left|0\right>\) 态和 \(\left|1\right>\)态上,通常表示为:
这里,\(a\)和\(b\)是复数。由于量子态的归一性条件 \(\left<\psi\middle|\psi\right> = 1\),因此,我们有:
对于二维希尔伯特空间,我们可以将计算基矢做如下的映射,
因此,任意单比特量子态可表述为:
在一般情况,我们并不关心全局相位,因此,我们可以假设 \(a=\cos\left(\theta/2\right), b=e^{i\phi}\sin\left(\theta/2\right)\):
这里,我们不妨在单位球中来表示该任意量子态,如下图,将 \(\theta\) 和 \(\phi\) 分别取为仰角和方位角。

下面,我们将展示怎么在MindSpore Quantum中展示一个单比特量子态,并且以动画的形式展示单比特量子态的演化。
导入相关模块#
from mindquantum.core.circuit import Circuit
from mindquantum.core.gates import RX, RZ
from mindquantum.io.display import BlochScene
为了在Jupyter Notebook中动态展示量子态,我们需要运行如下指令:
%matplotlib ipympl
搭建量子线路#
由上面bloch球可知,我们可以通过旋转门 RX 来控制仰角 \(\theta\),通过 RZ 来控制方位角 \(\phi\)。因此,我们可以搭建如下量子线路:
circ = Circuit() # 搭建制备任意单比特量子态的线路
circ += RX('theta').on(0) # 通过RX门控制仰角
circ += RZ('phi').on(0) # 通过RZ门控制方位角
circ.svg()
这里我们不妨取 \(\theta=\pi/4, \phi=\pi/4\),并计算出该位置的量子态。
import numpy as np
state1 = circ.get_qs(pr={'theta': np.pi/4, 'phi': np.pi/4})
print(state1)
[0.85355339-0.35355339j 0.14644661-0.35355339j]
展示量子态#
在MindSpore Quantum中,BlochScene 是用来展示布洛赫球的模块,我们可以在 BlochScene 中添加任意多的单比特量子态,并且还可以动画展示单比特量子态的演化。
scene = BlochScene() # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj1 = scene.add_state(ax, state1) # 往场景中添加一个量子态
此外,我们还可以以深色模式来展示布洛赫球,如下。
scene = BlochScene('dark') # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj1 = scene.add_state(ax, state1) # 往场景中添加一个量子态
展示量子态演化#
当该量子态是一个含时演化的量子态时,我们还可以在布洛赫场景中创建动画。这里我们不妨假设仰角 \(\theta\) 和方位角 \(\phi\) 是含时的,我们求出所有时间内的量子态。
t = np.linspace(0, 10, 500)
all_theta = 4 * np.sin(2 * t)
all_phi = 5 * np.cos(3 * t)
states = []
for theta, phi in zip(all_theta, all_phi):
states.append(circ.get_qs(pr={'theta': theta, 'phi': phi}))
states = np.array(states)
下面,我们创建一个深色的布洛赫场景,并用所演化出来的量子态的第一个量子态来初始化场景。
scene = BlochScene('dark') # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj = scene.add_state(ax, states[0]) # 往场景中添加一个量子态
为了能够动态展示量子态的演化,我们从布洛赫场景中创建一个动画对象。
anim = scene.animation(fig, ax, state_obj, states)

由此,我们可以看到单比特的量子态在布洛赫球中已经动起来了。
from mindquantum.utils.show_info import InfoTable
InfoTable('mindquantum', 'scipy', 'numpy')
| Software | Version |
|---|---|
| mindquantum | 0.9.11 |
| scipy | 1.10.1 |
| numpy | 1.24.4 |
| System | Info |
| Python | 3.8.17 |
| OS | Linux x86_64 |
| Memory | 16.62 GB |
| CPU Max Thread | 16 |
| Date | Tue Jan 2 14:41:09 2024 |