为同一个线性问题替换 QODE 方法

English · 简体中文

本例考虑 u'=-u。我们用 -I 的 BE 表示生成元,用一个 X 门制备初态,再分别选择 LCHS 和 Schrödingerization。生成元写成 scale 缩放 identity,问题连同初态一起装进 QODEProblem。

from oracq import Bits, Builder, QODEProblem, identity, scale
from oracq.algorithms.qode.ode import linear_qode
from oracq.algorithms.common.hamiltonian import taylor_hamiltonian
from functools import partial

b = Builder("initial_one", {"q": Bits(1)})
b.x(b["q"])
problem = QODEProblem(scale(-1, identity(1)), b.finish(),
                      dissipative=True, initial_norm=1.0)
kernel = partial(taylor_hamiltonian, degree=1)
lchs = linear_qode("lchs", hamiltonian_function=kernel)
schrodinger = linear_qode("schrodingerization", hamiltonian_function=kernel)

assert lchs.check(problem, time=0.05).ok
assert schrodinger.check(problem, time=0.05).ok
first = lchs.solve(problem, 0.05)
second = schrodinger.solve(problem, 0.05)
print(first.width, second.width)
print(len(first.operation.program().modules), len(second.operation.program().modules))
assert first.width == second.width == 1
1 1
31 28

两个入口都由 linear_qode 按方法名生成,共用 taylor_hamiltonian 充当近似模拟核。打印结果显示:两个生成器给出同样的 target 宽度 1,但内部模块数不同(LCHS 为 31,Schrödingerization 为 28),对应不同的辅助寄存器、近似方式和恢复条件。这个例子检查的是组装接口;有限一阶 Taylor 并不代表已经得到任意精度的微分方程解。

dissipative=True 是问题声明。LCHS 的问题级入口要求它明确存在;Schrödingerization 使用其他数学条件,尤其需要选择合适的辅助窗口和恢复通道。

从 PDE 开始

线性 PDE 先经过空间离散化,形成 DiscretePDE(generator, initial),再交给 make_qpde(qode)。非线性多项式 PDE 可以形成 PolynomialODE,由 Carleman 生成提升系统,再调用同一三参数线性求解协议。

完整的热方程、Burgers 方程与多种 given-oracle 示例位于:

uv run python examples/ode_input_models.py

相关页面