动手
前面各章各讲 TRG 主线的一步:列主序的 reshape、SVD 的求导规则和截断、分段求导。这一部分把它们拼成一个从头到尾能跑的程序:给定 β,算每个格点的 lnZ,用自动微分求内能 u,再对 u 做差分求比热 c,和 Onsager 精确解逐项对照。JAX 和 tenferro 各一份,两份的每一步一一对应。
- Ising 模型的 TRG:JAX 一张图
jit(value_and_grad),tenferro 每步一张 eager 图、逐步vjp串起反向;两边 lnZ/N 差 8e-16、导数差 5e-13;比热的差分步长要避开截断处奇异值交叉造成的跳变。
flowchart TB beta["β"] --> t0["局部张量"] t0 --> stepn["20 步 SVD 截断加收缩"] stepn --> lnz["lnZ/N"] lnz --> u["u:反向求导"] u --> c["c:对 u 做差分"] c --> ons["对照 Onsager"]
💬 关联讨论
发起讨论加载中...