# 提供自己的 Hamiltonian 分解 English · **简体中文** 假设你已经知道 `H=0.3I+0.7X` 的项分解。可以通过普通 Python 方法将它交给 [Trotter 实现](../manual/algorithms/trotter.md),不必先构造一个稠密矩阵,也不必注册新的语言类型。分解直接写成 {obj}`TrotterTerm ` 的元组,每个因子是一个 {obj}`PauliOperator `;{obj}`hamiltonian_simulation ` 接收任何能给出这些项的对象。 ```{testcode} import cmath import math from oracq.algorithms.common.hamiltonian import PauliOperator, TrotterTerm, hamiltonian_simulation from oracq import simulate class MyHamiltonian: hermitian = True def trotter_list(self): return (TrotterTerm(0.3, PauliOperator("I")), TrotterTerm(0.7, PauliOperator("X"))) evolution = hamiltonian_simulation(MyHamiltonian(), time=0.4, steps=3) state = simulate(evolution.operation.program()) expected = cmath.exp(-0.12j) * math.cos(0.28) print(state.amplitudes) print(evolution.alpha) assert abs(state.amplitudes[(0, 0)] - expected) < 1e-12 ``` ```{testoutput} {(0, 0): (0.9541441386892553-0.11505006784720223j), (1, 0): (-0.03308314468637069-0.274368274461448j)} 1.0 ``` 打印出的 `(0, 0)` 幅度就是解析值 `exp(-0.12j)·cos(0.28)` 的浮点形式,`X` 项把剩余概率转到 `(1, 0)` 上。这里两个项对易,因此可以直接使用解析结果检查幅度。`evolution.alpha=1`,因为生成的是完整酉演化。 对于非对易项,Trotter 的步数控制乘积公式近似。只有 Hermitian 声明还不够:每一项需要提供可调用的演化实现。若选择 QSP 路径,则应提供它需要的 BE 访问和实际 QSP 内核。 这一例子体现了算法约定的作用:Hamiltonian 对象提供 {obj}`trotter_list() `,Trotter 算法负责检查并调用它;RIR 只接收最后生成的模块与门。 ## 相关页面 - 手册:[输入与算子](../manual/operators.md)(Hamiltonian 的算子视图与协议) - 算法页:[Hamiltonian 演化](../manual/algorithms/hamiltonian-simulation.md)、[Trotter 乘积公式模拟](../manual/algorithms/trotter.md)、[截断 Taylor 块编码](../manual/algorithms/taylor-block-encoding.md) - API 参考:[Hamiltonian 演化](../api/algorithms/common/hamiltonian.rst)