布洛赫球
单比特量子态
与经典比特不一样的是,量子比特可以同时处于计算基矢 \(\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中展示一个单比特量子态,并且以动画的形式展示单比特量子态的演化。
导入相关模块
[9]:
from mindquantum.core.circuit import Circuit
from mindquantum.core.gates import RX, RZ
from mindquantum.io.display import BlochScene
为了在Jupyter Notebook中动态展示量子态,我们需要运行如下指令:
[10]:
%matplotlib ipympl
搭建量子线路
由上面bloch球可知,我们可以通过旋转门 RX 来控制仰角 \(\theta\),通过 RZ 来控制方位角 \(\phi\)。因此,我们可以搭建如下量子线路:
[11]:
circ = Circuit() # 搭建制备任意单比特量子态的线路
circ += RX('theta').on(0) # 通过RX门控制仰角
circ += RZ('phi').on(0) # 通过RZ门控制方位角
circ.svg()
[11]:
这里我们不妨取 \(\theta=\pi/4, \phi=\pi/4\),并计算出该位置的量子态。
[12]:
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 中添加任意多的单比特量子态,并且还可以动画展示单比特量子态的演化。
[13]:
scene = BlochScene() # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj1 = scene.add_state(ax, state1) # 往场景中添加一个量子态
此外,我们还可以以深色模式来展示布洛赫球,如下。
[14]:
scene = BlochScene('dark') # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj1 = scene.add_state(ax, state1) # 往场景中添加一个量子态
展示量子态演化
当该量子态是一个含时演化的量子态时,我们还可以在布洛赫场景中创建动画。这里我们不妨假设仰角 \(\theta\) 和方位角 \(\phi\) 是含时的,我们求出所有时间内的量子态。
[20]:
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)
下面,我们创建一个深色的布洛赫场景,并用所演化出来的量子态的第一个量子态来初始化场景。
[22]:
scene = BlochScene('dark') # 创建布洛赫绘图场景
fig, ax = scene.create_scene() # 初始化场景
state_obj = scene.add_state(ax, states[0]) # 往场景中添加一个量子态
为了能够动态展示量子态的演化,我们从布洛赫场景中创建一个动画对象。
[23]:
anim = scene.animation(fig, ax, state_obj, states)
由此,我们可以看到单比特的量子态在布洛赫球中已经动起来了。
[1]:
from mindquantum.utils.show_info import InfoTable
InfoTable('mindquantum', 'scipy', 'numpy')
[1]:
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 |