Rust in Everything
基于 tenferro-ad 0.8.0

动手

前面各章各讲 TRG 主线的一步:列主序的 reshape、SVD 的求导规则和截断、分段求导。这一部分把它们拼成一个从头到尾能跑的程序:给定 β,算每个格点的 lnZ,用自动微分求内能 u,再对 u 做差分求比热 c,和 Onsager 精确解逐项对照。JAX 和 tenferro 各一份,两份的每一步一一对应。

  1. 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"]

💬 关联讨论

发起讨论
加载中...