[ PROMPT_NODE_26992 ]
quantum_chemistry
[ SKILL_DOCUMENTATION ]
# PennyLane 量子化学
## 目录
1. [分子哈密顿量](#molecular-hamiltonians)
2. [变分量子本征求解器 (VQE)](#variational-quantum-eigensolver-vqe)
3. [分子结构](#molecular-structure)
4. [基组与映射](#basis-sets-and-mapping)
5. [激发态](#excited-states)
6. [量子化学工作流](#quantum-chemistry-workflows)
## 分子哈密顿量
### 构建分子哈密顿量
python
import pennylane as qml
from pennylane import qchem
import numpy as np
# 定义分子
symbols = ['H', 'H']
coordinates = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.74]) # 埃
# 生成哈密顿量
hamiltonian, n_qubits = qchem.molecular_hamiltonian(
symbols,
coordinates,
charge=0,
mult=1, # 自旋多重度
basis='sto-3g',
method='dhf' # Dirac-Hartree-Fock
)
print(f"哈密顿量: {hamiltonian}")
print(f"所需量子比特数: {n_qubits}")
### Jordan-Wigner 变换
python
# 哈密顿量通过 Jordan-Wigner 自动转换为量子比特形式
# 手动转换:
from pennylane import fermi
# 费米子算符
a_0 = fermi.FermiC(0) # 产生算符
a_1 = fermi.FermiA(1) # 湮灭算符
# 转换为量子比特
qubit_op = qml.qchem.jordan_wigner(a_0 * a_1)
### Bravyi-Kitaev 变换
python
# 替代映射(对某些系统更高效)
from pennylane.qchem import bravyi_kitaev
# 使用 Bravyi-Kitaev 构建哈密顿量
hamiltonian, n_qubits = qchem.molecular_hamiltonian(
symbols,
coordinates,
mapping='bravyi_kitaev'
)
### 自定义哈密顿量
python
# 从系数和算符构建哈密顿量
coeffs = [0.2, -0.8, 0.5]
obs = [
qml.PauliZ(0),
qml.PauliZ(0) @ qml.PauliZ(1),
qml.PauliX(0) @ qml.PauliX(1)
]
H = qml.Hamiltonian(coeffs, obs)
# 或者使用简化语法
H = 0.2 * qml.PauliZ(0) - 0.8 * qml.PauliZ(0) @ qml.PauliZ(1) + 0.5 * qml.PauliX(0) @ qml.PauliX(1)
## 变分量子本征求解器 (VQE)
### VQE 基本实现
python
from pennylane import numpy as np
# 定义设备
dev = qml.device('default.qubit', wires=n_qubits)
# Hartree-Fock 态准备
hf_state = qchem.hf_state(electrons=2, orbitals=n_qubits)
def ansatz(params, wires):
"""变分 ansatz."""
qml.BasisState(hf_state, wires=wires)
for i in range(len(wires)):
qml.RY(params[i], wires=i)
for i in range(len(wires)-1):
qml.CNOT(wires=[i, i+1])
@qml.qnode(dev)