[ PROMPT_NODE_26304 ]
simulation
[ SKILL_DOCUMENTATION ]
# Cirq 中的模拟
本指南涵盖量子电路模拟,包括精确模拟和噪声模拟、参数扫描以及量子虚拟机 (QVM)。
## 精确模拟
### 基础模拟
python
import cirq
import numpy as np
# 创建电路
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H(q0),
cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key='result')
)
# 模拟
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=1000)
# 获取测量结果
print(result.histogram(key='result'))
### 态矢量模拟
python
# 不进行测量以获取最终状态
simulator = cirq.Simulator()
result = simulator.simulate(circuit_without_measurement)
# 访问态矢量
state_vector = result.final_state_vector
print(f"态矢量: {state_vector}")
# 获取振幅
print(f"|00⟩ 的振幅: {state_vector[0]}")
print(f"|11⟩ 的振幅: {state_vector[3]}")
### 密度矩阵模拟
python
# 使用密度矩阵模拟器处理混合态
simulator = cirq.DensityMatrixSimulator()
result = simulator.simulate(circuit)
# 访问密度矩阵
density_matrix = result.final_density_matrix
print(f"密度矩阵形状: {density_matrix.shape}")
### 逐步模拟
python
# 逐时刻模拟
simulator = cirq.Simulator()
for step in simulator.simulate_moment_steps(circuit):
print(f"时刻 {step.moment} 后的状态: {step.state_vector()}")
## 采样与测量
### 多次运行 (Shots)
python
# 多次运行电路
result = simulator.run(circuit, repetitions=10000)
# 访问测量计数
counts = result.histogram(key='result')
print(f"测量计数: {counts}")
# 获取原始测量数据
measurements = result.measurements['result']
print(f"形状: {measurements.shape}") # (重复次数, 量子比特数)
### 期望值
python
# 测量可观测量期望值
from cirq import PauliString
observable = PauliString({q0: cirq.Z, q1: cirq.Z})
result = simulator.simulate_expectation_values(
circuit,
observables=[observable]
)
print(f"⟨ZZ⟩ = {result[0]}")
## 参数扫描
### 参数扫描
python
import sympy
# 创建参数化电路
theta = sympy.Symbol('theta')
q = cirq.LineQubit(0)
circuit = cirq.Circuit(
cirq.ry(theta)(q),
cirq.measure(q, key='m')
)
# 定义参数扫描
sweep = cirq.Linspace(key='theta', start=0, stop=2*np.pi, length=50)
# 运行扫描
sim