线性代数算法
概述
unitarylab_algorithms.linear_algebra 包提供了用于线性代数任务的量子算法,包括量子傅里叶变换、线性方程组求解、信号处理和变分方法。
| 算法 | 类 | 任务 |
|---|---|---|
| QFT | QFTAlgorithm | 量子傅里叶变换 |
| HHL | HHLAlgorithm | 求解线性方程组 |
| LCU | LCUAlgorithm | 实现 |
| QSP | QSPAlgorithm | 基于 QSP 的多项式变换 |
| QSVT-QLSA | QSVTLinearSolverAlgorithm | 基于 QSVT 的线性求解器 |
| VQLS | VQLSAlgorithm | 变分量子线性求解器 |
量子傅里叶变换(QFT)
背景
量子傅里叶变换是离散傅里叶变换的量子类比,将计算基态 映射为:
QFT 是 Shor 算法、QPE、HHL 及许多其他算法的子程序。本模块同时支持逆 QFT。
导入
from unitarylab_algorithms.linear_algebra.qft.algorithm import QFTAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n | int | — | 量子比特数 |
state | np.ndarray | None | None | 初始态向量(默认为 ` |
inverse | bool | False | 是否执行逆 QFT |
示例
import numpy as np
from unitarylab_algorithms.linear_algebra.qft.algorithm import QFTAlgorithm
algo = QFTAlgorithm()
result = algo.run(n=4)
print(result['status']) # 'ok'
# 逆 QFT
result_inv = algo.run(n=4, inverse=True)快速演示
from unitarylab_algorithms.linear_algebra.qft.algorithm import test
test(n=4)HHL 线性方程组求解算法
背景
Harrow–Hassidim–Lloyd(HHL)算法求解线性方程组 ,时间复杂度为 ,其中 是 的条件数, 是矩阵维数。经典最优算法为 。
算法利用 QPE 将 的本征值编码到相位寄存器,然后通过受控旋转计算每个本征值的倒数 ,最后反计算相位寄存器。
要求:
- 必须是厄米矩阵
- 的维数必须是 2 的幂次
导入
from unitarylab_algorithms.linear_algebra.hhl.algorithm import HHLAlgorithm.run() 参数
| 参数 | 类型 | 说明 |
|---|---|---|
A | np.ndarray | 厄米系数矩阵(维数必须为 ) |
b | np.ndarray | 右侧向量 |
d | int | 相位寄存器量子比特数(精度 ) |
示例
import numpy as np
from unitarylab_algorithms.linear_algebra.hhl.algorithm import HHLAlgorithm
A = np.array([[0.8, 0], [0, 0.4]])
b = np.array([1, 2])
algo = HHLAlgorithm()
result = algo.run(A=A, b=b, d=11)
print(result['status'])快速演示
from unitarylab_algorithms.linear_algebra.hhl.algorithm import test
test(A=[[0.8, 0], [0, 0.4]], b=[1, 2], d=11)注意事项
- 较大的
d可获得更高精度,但会显著增加线路深度。 - 强烈建议使用条件数较小(条件良好)的矩阵进行实验。
线性酉组合(LCU)算法
背景
LCU 通过将系数 编码到辅助”制备”寄存器,并对该寄存器进行条件应用酉算符 ,来实现非酉算符 。LCU 是哈密顿量模拟、QSVT 和块编码的核心原语。
导入
from unitarylab_algorithms.linear_algebra.lcu.algorithm import LCUAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alphas | List[float] | — | 非负系数列表 |
unitaries | List[Circuit] | — | 酉算符线路列表 |
n_sys | int | — | 系统寄存器量子比特数 |
initial_state | Circuit | None | None | 制备系统初始态的线路(可选) |
示例
from unitarylab_algorithms.linear_algebra.lcu.algorithm import LCUAlgorithm
# 构造酉线路(如 Pauli 算符),然后与系数一起传入
algo = LCUAlgorithm()
result = algo.run(alphas=[0.6, 0.4], unitaries=[U_I, U_X], n_sys=1)
print(result['status'])快速演示
from unitarylab_algorithms.linear_algebra.lcu.algorithm import test
test(n=1, alphas=[0.6, 0.4], paulis=['I', 'X'])量子信号处理(QSP)
背景
linear_algebra.qsp 模块实现了 QSP 多项式变换,用于模拟给定本征值 下的 演化。它是 QSVT 和其他高级算法的子程序。
导入
from unitarylab_algorithms.linear_algebra.qsp.algorithm import QSPAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
t | float | — | 目标演化时间 |
d | int | — | 多项式阶数 |
x | float | 0.5 | 测试本征值() |
示例
from unitarylab_algorithms.linear_algebra.qsp.algorithm import QSPAlgorithm
algo = QSPAlgorithm()
result = algo.run(t=1.0, d=10, x=0.5)
print(result['status'])快速演示
from unitarylab_algorithms.linear_algebra.qsp.algorithm import test
test(t=1.0, d=10, x=0.5)基于 QSVT 的线性方程组求解算法
背景
量子奇异值变换(QSVT)通过块编码将 QSP 推广到任意矩阵,从而对奇异值进行多项式变换。QSVT 线性求解器利用这一框架对 的奇异值实现矩阵逆函数 ,以最优查询复杂度求解 。
导入
from unitarylab_algorithms.linear_algebra.qsvt_qlsa.algorithm import QSVTLinearSolverAlgorithm.run() 参数
| 参数 | 类型 | 说明 |
|---|---|---|
A | np.ndarray | 系数矩阵 |
b | np.ndarray | 右侧向量 |
epsilon | float | 目标近似精度 |
示例
import numpy as np
from unitarylab_algorithms.linear_algebra.qsvt_qlsa.algorithm import QSVTLinearSolverAlgorithm
A = np.array([[0.8, 0.1], [0.1, 0.6]])
b = np.array([1.0, 0.5])
algo = QSVTLinearSolverAlgorithm()
result = algo.run(A=A, b=b, epsilon=1e-3)
print(result['status'])变分量子线性求解器(VQLS)
背景
VQLS 是一种适用于近期量子设备(NISQ)的变分算法,用于求解线性方程组。通过变分拟设参数化解态,最小化基于残差 的代价函数。系数矩阵被表达为线性组合 。
导入
from unitarylab_algorithms.linear_algebra.vqls.algorithm import VQLSAlgorithm.run() 参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
n_qubits | int | 3 | 系统量子比特数 |
coefficients | List[float] | None | [1.0, 0.2, 0.2] | 系数 |
max_iterations | int | 200 | 最大优化迭代次数 |
tolerance | float | 1e-6 | 收敛容差 |
initial_spread | float | 0.5 | 初始参数的随机范围 |
示例
from unitarylab_algorithms.linear_algebra.vqls.algorithm import VQLSAlgorithm
algo = VQLSAlgorithm()
result = algo.run(n_qubits=3, coefficients=[1.0, 0.2, 0.2], max_iterations=200)
print(result['status'])快速演示
from unitarylab_algorithms.linear_algebra.vqls.algorithm import test
test(n=3, coefficients=[1.0, 0.2, 0.2], max_iterations=100)最后更新于