Skip to Content

线性方程组求解

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。

相关页面

最后更新于