线性方程组求解
solve() 为 提供统一入口,可在 HHL、QSVT、Schrödingerization、绝热、变分和 Chebyshev Krylov 方法之间切换。
最小示例
import numpy as np
from unitarylab.library import solve
A = np.array([[2.0, 1.0], [1.0, 3.0]])
b = np.array([1.0, 0.0])
result = solve(
A, b,
method="hhl",
d=6,
backend="torch",
device="cpu",
)
print(result.solution)
print(result.scaling_factor)入口与方法
solve(A, b, method="hhl", backend="torch", device="cpu",
dtype=np.complex128, precondition=None, **kwargs)| 方法及别名 | 矩阵要求 | 常用专属参数 |
|---|---|---|
hhl | 厄米矩阵 | d=8、t=None |
qsvt、qsvt_qlsa | 厄米矩阵 | epsilon=0.01 |
schro、schro_trotter、schro_classical | 方阵;具体限制由所选分支决定 | Schrödingerization 参数 |
aqc、discrete_adiabatic | 厄米矩阵 | 绝热总时间与离散步数 |
vqls | 任意方阵 | cost_function、n_layers、maxiter、tol、seed、epsilon |
cks | 厄米矩阵 | epsilon=0.01 |
A 必须为 方阵,b 长度必须为 ,且 为二次幂。矩阵和向量应包含有限数值;零向量、奇异或不符合方法要求的矩阵可能使算法拒绝输入或无法得到有效解。
预处理
precondition 可选值如下:
| 值 | 行为 | 适用提示 |
|---|---|---|
None | 不预处理 | 默认 |
diagonal / jacobi | 对称对角缩放 | 保持厄米性 |
symmetric / ic | 对称不完全 Cholesky | 适合正定矩阵,保持厄米性 |
ilu | 不完全 LU 分裂 | 可能破坏厄米性,HHL/QSVT/AQC 中需谨慎 |
预处理后,.solution 已恢复到原问题坐标。转换后的问题保存在 .matrix、.rhs,原输入保存在 .matrix_original、.rhs_original。
返回结果
LinearSolverResult 字段如下:
| 字段 | 说明 |
|---|---|
solution | 近似解向量 |
matrix、rhs | 实际交给求解器的问题 |
circuit | 算法线路;纯经典分支可以为 None |
scaling_factor | 从归一化量子态恢复解幅值的缩放因子 |
precondition_mode | 预处理信息或 None |
matrix_original、rhs_original | 使用预处理时的原始输入 |
底层 HHLSolver、QSVTSolver、SCHROSolver、AQCSolver、VQLSSolver 和 CKSSolver 可从 unitarylab.library.linear_solver 导入,统一返回 (circuit, solution, scaling_factor)。直接调用底层求解器时,不会获得高层结果对象中的预处理元数据。
使用建议
- 先用
np.linalg.solve(A, b)检查小规模基准和残差。 - 方法专属参数通过
**kwargs转发;不要把某个方法的参数传给其他方法。 - 增大相位比特数、线路层数或多项式精度会提高资源消耗,不一定单调改善有限精度结果。
- 固定 VQLS 等随机优化流程时显式设置
seed。
相关页面
最后更新于