# 科学计算工作流:输入模型、求解器与复现
English · **简体中文**
本章串联 QHAM、Carleman、LCHS 和 CBMD 的完整示例,解释每一步产生的对象、
仍然开放的接口,以及结果能够支持的结论。论文保留机制与代表性实验;完整
用法、输入变体和逐步讲解在这里继续维护。
## 先区分三个层次
| 层次 | 决定什么 | 典型对象 |
|---|---|---|
| 数学输入与近似 | PDE、离散化、截断阶、初态范数、物理输出窗口 | {obj}`PolynomialPDE `、{obj}`QHAMPlan `、{obj}`PolynomialODE ` |
| 量子算法生成 | 选哪个求解器及内部模拟核,生成哪些模块调用 | {obj}`QODESolver `、{obj}`linear_qode `、{obj}`carleman_qode ` |
| 实现绑定与执行 | 用门表、QRAM 或算术实现开放槽,提供运行期数据 | RIR {obj}`Program `、{obj}`Binding `、内存快照 |
替换求解器通常需要重新生成程序;给既有槽换一个兼容实现可以使用 {obj}`bind `。
改变公开位宽或已用于组装的 alpha 不能只替换标签。数学条件相同与接口兼容
也是两件事:一个生成元能提供 BE,并不意味着它满足所有 QODE 方法的条件。
## QHAM:从方程到提升后的线性输入
先阅读[最小 QHAM 教程](qham.md)。下面直接包含实际示例源码,因此导入、
方程、数据与求解器配置始终和仓库脚本一致。
```{literalinclude} ../../../examples/general_qham.py
:language: python
:start-at: from functools import partial
:caption: 强迫 Burgers 方程的 QHAM 组装与两种求解器选择。
```
按对象的生命周期理解这段代码:
1. {obj}`Field ` 与 {obj}`Known ` 构造未知场及按名字引用的强迫项。表达式描述待求场,
不是把一个普通数值函数直接作用到量子振幅上。
2. {obj}`QHAMPlan(pde, order=2) ` 确定有限 HAM 截断与量子适配线性化规则。
计划可保存、恢复和按行查询,不会立即物化完整提升矩阵。
3. {obj}`Grid ` 与 {obj}`Discretization ` 决定周期网格、导数和已知数据。边界条件属于
这一层,不由求解器猜测。
4. {obj}`structured_fd_bindings ` 用移位、局部系数和多线性收缩构造端口 BE;
{obj}`qham_input_model ` 再组装提升生成元和初态。提升初态各张量块的相对范数
必须保留,不能逐块独立归一化。
5. {obj}`linear_qode ` 选择线性演化方法;{obj}`partial(taylor_hamiltonian, degree=1) `
显式指定本例的近似模拟核。`solve` 生成带信号和恢复信息的态 oracle,
并不直接返回一个已认证收敛的经典 PDE 解。
6. `dissipative_shift` 显式改变生成元以满足另一种方法的前提。相应增长
恢复因子不能丢弃,也不能把这个步骤当成免费提高成功率的方法。
原始方法见 [Xue 等的 QHAM 论文](https://doi.org/10.1007/s11433-024-2584-2)。
有限闭包、张量块权重与物理输出的推导见[QHAM 数学说明](../reference/qham-derivation.md),
一般多项式、强迫与离散化限制见[完整实现文档](../manual/qham.md)。
## Carleman:开放系数端口与可替换线性求解器
Carleman 路径从多项式 ODE 的系数端口出发,按所选 cutoff 构造张量提升。
它与 QHAM 的截断对象不同,不能把两个截断阶当作同一精度参数。
```{literalinclude} ../../../examples/ode_input_models.py
:language: python
:start-at: " # 6. Ordinary PDE"
:end-before: " # 7."
:dedent: 4
:caption: Carleman 示例片段;导入、网格和线性求解器配置见完整脚本。
```
这里 `concrete.coefficients` 按非线性次数保存系数 BE。循环为每个系数建立
一个同宽、同信号布局、同 alpha 的开放声明,同时在 `bindings` 中保留对应
实现。`BurgersInitial` 同样是开放态制备槽,原始初态范数由宿主单独携带。
{obj}`PolynomialODE ` 因此描述数学输入;{obj}`carleman_qode ` 负责提升;传入的
`linear_solver` 负责提升后的线性问题。脚本分别使用 Schrödingerization
与显式移位后的 LCHS,并把恢复因子写入记录。运行两次生成器不意味着两种
方法的成功概率、截断误差或线路成本相同。
数学约定与接口见 [Carleman 页面](../manual/algorithms/carleman.md)。
下载包含所有上下文的 {download}`完整输入模型脚本 <../../../examples/ode_input_models.py>`。
## LCHS:同一个开放图的门表与 QRAM 绑定
LCHS 的配置包含求积计划与 Hermitian 分支的模拟核。示例中的 Cauchy 节点
和一阶 Taylor 核是具体的近似选择,不是语言默认保证的目标精度。
```{literalinclude} ../../../examples/ode_input_models.py
:language: python
:start-at: " # 3. Same open graph"
:end-before: " # 4."
:dedent: 4
:caption: 不改调用方,只改变角数据库和初态制备的绑定。
```
`DiagonalAngles` 存储的是旋转角字,{obj}`diagonal_block_encoding ` 把它解释为
矩阵系数。`Initial` 是独立的初态制备槽。两个 `write` 调用接收同一个开放
`state`,但分别选择门表与 QRAM 实现;后者还必须提供 `memory` 中的两个表。
脚本的 `save_case` 将开放、第一次部分绑定和最终闭合的 RIR 分别保存,并
生成模块化后端文本。中间资源捕获仍保留为显式参数,不会把内存内容塞进 RIR。
更小的独立示例见[开放程序实现比较](algorithm-research.md),方法配置与适用
条件见 [LCHS 页面](../manual/algorithms/lchs.md)。
## CBMD:复用 QHAM 输入,但显式处理耗散前提
```{literalinclude} ../../../examples/input_models.py
:language: python
:start-at: " # ---- CBMD: QHAM"
:end-before: " (args.output"
:dedent: 4
:caption: 已构造的 QHAM 端口通过显式适配交给 CBMD。
```
CBMD 的方法来源是 [Wang 等的轮廓矩阵分解](https://doi.org/10.1088/2058-9565/ae7b7e)。
这段代码复用 QHAM 的计划和开放系数输入,而不是在 CBMD 内重新解释 PDE。
`model.dissipative_shift()` 产生的移位与恢复信息属于数学适配;最终的
`qram_dict` 和 `qram_memory` 才是实现及运行期数据绑定。
节点、留数、有限截断及未包含项见 [CBMD 页面](../manual/algorithms/cbmd.md)。
不要根据 `check().ok` 推断轮廓截断误差或物理恢复误差已经得到认证。
## 输入模型变体与复现
{download}`输入模型变体脚本 <../../../examples/input_models.py>` 对四个家族提供
结构化端口、谱构造和 QRAM 数据路径。它是构造示例,不是跨方法准确率排行榜。
```bash
PYTHONPATH=src python examples/general_qham.py
PYTHONPATH=src python examples/ode_input_models.py
PYTHONPATH=src python examples/input_models.py
PYTHONPATH=src python examples/research_workflow.py
PYTHONPATH=src python tools/build_qlss_comparison.py
```
真实后端检查必须使用同时安装 `pysparq` 和 `uniqc` 的解释器:
```bash
PYTHONPATH=src /path/to/backend/python examples/research_workflow.py --native
PYTHONPATH=src /path/to/backend/python tools/run_verification.py \
--group oracles --group blockencoding --group arithmetic \
--group mathfunc --group qham_qfvm --group ode
```
数值报告应分别解释:线路相对独立有限精度参考的实现误差、有限精度或截断
相对原问题的方法误差,以及后选择成功率和物理范数恢复。程序可导出、后端
相互一致、方法对原 PDE 收敛是不同结论。完整边界见[适用范围](../manual/limits.md)。
## 格式细节、资源数据与扩展功能
| 要查的细节 | 维护位置 |
|---|---|
| RIR 节点、完整序列化文本与 OriginIR-ext 文法 | [RIR 规范](../reference/rir.md) |
| 开放声明、分批绑定、资源捕获 | [开放 IR](../reference/open-ir.md) |
| 数学函数的中间表示与序列化 | [数学 IR](../reference/math-ir.md) |
| Toffoli/旋转/QRAM 计数、通用规模扫描 | [资源估计](../manual/resource-estimation.md) |
| QFVM 的输入、Roe 算术和恢复链 | [QFVM 文档](../manual/qfvm.md) |
| 更广的算法清单与验证状态 | [算法手册](../manual/algorithms/index.md)、[验证覆盖](../development/validation-coverage.md) |
| 类、函数、参数名与返回对象 | [API 参考](../api/index.rst) |
这些页面承接完整实现与教程细节。非核心算法仍在库中维护,但它们的数量不被
用作论文中框架优越性的证据。跨框架代码量实验的脚本仍保留在
`tools/expressiveness/`,不属于论文保留的实验依据。