浏览器科学分析:XRD 与 VTNA 的方法和验证

浏览器 XRD 与 VTNA 的数值验证:39 个衍射输入、动力学拟合数组、模型条件、配对计时及公开数据复现方法。

Felix Fei

浏览器科学分析:XRD 与 VTNA 的方法和验证

浏览器 XRD 与 VTNA 的数值验证:39 个衍射输入、动力学拟合数组、模型条件、配对计时及公开数据复现方法。

2026-10-01 · Mol2Mat · Felix Fei · revision 1

本文研究粉末 X 射线衍射(XRD)与可变时间归一化分析(VTNA)的浏览器实现。XRD 以 pymatgen 的离散峰表为参考,VTNA 以 Auto-VTNA 的归一化时间、评分和残差为参考,分别评价数值一致性、输入范围与计算成本。方法部分给出结构散射和动力学拟合的假设,数据部分说明峰表、拟合数组与性能统计的复现方法。

2026 年 10 月 10 日的核查中,XRD 的 39 个输入全部通过,最大峰位差为 1.4211×10⁻¹³°;VTNA 独立检查覆盖 13436 个数值,最大绝对差为 5.1509×10⁻¹¹。预热硅任务的配对中位耗时从 78.2 ms 降至 3.5 ms,VTNA 则通过评分与残差分析展示拟合约束对级数选择的影响。

XRD:粉末衍射计算与验证

晶格、结构因子与粉末强度

令晶格矩阵 AA 的列为实空间基矢,采用省略 2π 因子的倒易晶格约定。对整数指标 h=(h,k,l)\mathbf h=(h,k,l),倒易矢量、晶面间距与 Bragg 条件为:

g=A−Th,dhkl=1∥g∥,2dhklsin⁡θ=λ.\mathbf g=A^{-\mathsf T}\mathbf h,\qquad d_{hkl}=\frac{1}{\lVert\mathbf g\rVert},\qquad 2d_{hkl}\sin\theta=\lambda.

晶胞长度和波长以 Å 表示,度与弧度在显示和三角函数边界转换。

硅与金红石的原生峰位、强度与 TypeScript 回放重合。
图 1. 合成晶胞计算,λ = 1.5406 Å。蓝线为原生离散峰,空心圆为 TypeScript 内核输出。

原子散射因子使用固定的元素系数。令 s=sin⁡θ/λs=\sin\theta/\lambda,位点占位为 ojo_j,分数坐标为 rj\mathbf r_j,则:

fj(s)=Zj−41.78214s2∑m=14ajmexp⁡(−bjms2),Fhkl=∑jojfj(s)exp⁡(2πih ⁣⋅ ⁣rj).f_j(s)=Z_j-41.78214s^2\sum_{m=1}^{4}a_{jm}\exp(-b_{jm}s^2),\qquad F_{hkl}=\sum_j o_jf_j(s)\exp(2\pi i\mathbf h\!\cdot\!\mathbf r_j).

同位点的不同元素按各自散射因子与占位作相干求和,空位的散射贡献为零。

同一角度的反射累积后,采用参考程序的 Lorentz–polarization 因子:

Ihkl∝∣Fhkl∣21+cos⁡2(2θ)sin⁡2θcos⁡θ.I_{hkl}\propto |F_{hkl}|^2\frac{1+\cos^2(2\theta)}{\sin^2\theta\cos\theta}.

全参考范围的最大峰归一化为 100。图 1展示合成晶胞的计算离散峰,峰高的单位为相对强度。

参考输入与计算范围

双精度 TypeScript 内核以 pymatgen 2026.9.23 的 XRDCalculator 为参考。39 个固定输入包含 19 个可接受结果(其中两个零峰区间)和 20 个预期拒绝输入,覆盖硅、金、金红石、六方钛、三斜晶胞、混合占位、重复位点、空位、不同波长和 200 位点边界。

39 个计算夹具的接受、预期拒绝和零峰区间计数。
图 2. 39 个固定输入:19 个接受、20 个预期拒绝。接受结果含 17 个非空谱与两个零峰区间,计数单位为测试用例。

反射枚举按实际倒易矢量长度筛选,利用 Friedel 对称性及同元素散射因子复用减少重复运算。峰合并使用 10⁻⁵° 分箱与 ties-to-even 舍入,强度截断为 0.001 %;先在 0–150° 枚举并归一化,再裁剪请求区间。原始晶格、坐标和占位保留,默认 symprec=0。

密集峰表与边界输入

三斜测试晶胞含 856 个离散峰,用于检查一般倒易晶格及家族归并。强度阈值上下、第一峰裁剪边界和拒绝原因均纳入回放;每个输入保存原生峰表、参考耗时与 SHA-256。

19 个原生输出的峰数从 0 至 856。
图 3. 19 个原生接受输出的实际峰数,覆盖强度阈值与裁剪边界。各输入的晶胞、波长和角度范围随原始数据提供,两个空区间标为 0。

逐峰数值对照

验收逐峰比较。峰个数、成员关系和 hklhkl 家族集合要求相同;2θ2\theta、d 与相对强度使用下表中的既定绝对容差。强度容差作用于 0–100 的数值标尺。

三个数值字段在所有夹具中均低于验收容差。
图 4. 19 个接受输入含两个零峰区间。纵轴为最大差 / 既定容差;对数轴展示正差值。峰成员与 hkl 家族逐项精确检查。
表 1. 既定容差与最大差
字段绝对容差最大绝对差
2θ / °1×10⁻⁶1.4211 × 10⁻¹³
d / Å1×10⁻⁷1.7764 × 10⁻¹⁵
相对强度 / 0–1001×10⁻⁴9.9476 × 10⁻¹⁴
峰成员、hkl 家族精确一致全部一致

19 个可接受输入中,峰位、间距和强度的最大差分别为 1.4211×10⁻¹³°、1.7764×10⁻¹⁵ Å 和 9.9476×10⁻¹⁴。39 个测试全部通过,包括预期拒绝的输入。图 4 中的差值说明两套双精度程序对同一结构给出接近的结果;结构参数是否准确,则取决于结构来源和测量条件。

产品导出记录另含 COD 1512541 的 6 个计算峰与 JARVIS dft_3d_JVASP-1002 的 14 个计算峰;相对原生 pymatgen,两者最大角度差均为 2.8422×10⁻¹⁴°。峰表由各记录的晶格、原子坐标和占位计算,来源身份与输入哈希随结果保存。[2, 3, 4]

预热硅任务的配对测量

硅测试输入在同一 macOS Chromium 会话中交替运行旧、新分发 Worker,各预热一次后测三次。旧版为 77.1、78.2、79.3 ms,新版为 3.5、3.5、2.4 ms;中位数从 78.2 降至 3.5 ms,降低 95.5 %,节省约 74.7 ms。[5]

优化后 Worker 任务耗时降低,科学输出保持一致。
图 5. 2026-10-10,macOS Chromium;旧、新分发包交替执行,各预热一次后 n = 3。计时从任务提交至结果回传,覆盖协议、进度及计算。柱为中位数,点为实测值。
表 2. 同计时边界的配对中位数,n = 3
输入优化前 / ms优化后 / ms耗时降低
硅78.23.595.5 %

两版保留全部 21 次进度事件,科学输出逐项相同;比较字段中仅移除设备自检耗时。当前分发包的 17 项 Worker 协议、存储、范围及数值检查通过,取消约 1.1 ms 后重试成功。39 个固定测试输入沿用原峰位、间距和强度容差。

计时覆盖预热 Worker 的任务提交、计算、进度通知与结果回传。复测使用相同输入、初始化状态与完整任务边界,逐次耗时用于计算图 5 中的中位数和范围。

不同输入的历史计算成本

枚举成本由倒易空间候选数和位点数共同决定。当前范围为显式三维周期晶胞、1–200 位点、0.5–3 Å 波长与 5–150° 角度区间;整数枚举盒最多 250000 个候选,候选数与位点数乘积最多 5000000。大晶胞即使原子较少,也可能产生密集倒易点。

历史单次记录中,硅测试输入的 Node 内核约 1.89 ms、原生 Python 参考约 9.11 ms;200 位点测试输入分别约 27.89 ms 与 35.31 ms。下表作为 n=1n=1 的成本记录保留,原生与 Node 各自的计时入口随数据提供。

COD 和 JARVIS 导出记录记录的任务耗时分别为 0.135 s 和 0.081 s;独立 Python 验证还包含初始化等工作。它们记录的是不同过程。因此,评价优化效果采用前一节从任务提交到结果回传的配对测量,历史记录则用于了解各类输入的计算成本。

表 3. 开发机单次内核与参考耗时,n = 1
夹具Node / msPython / ms
硅1.8949.111
rutile-noncubic0.5483.795
triclinic4.8068.720
200-sites27.88635.311

结构与实验条件

计算采用运动学近似、实值正常原子散射因子和占位平均结构。实值散射因子给出 Friedel 对等强度;同位点部分占位以相干平均振幅进入 Bragg 反射。输出为按指定范围归一化的离散峰,适用于结构预览和参考峰表复现。实验谱建模需结合异常散射、热振动、缺陷与无序、择优取向、峰形、背景及仪器响应。

VTNA:反应级数分析与验证

浓度归一化与时间轴

同一反应在不同初始浓度下,进程曲线通常会以不同速度推进。Variable Time Normalization Analysis(VTNA)用浓度的候选幂次重新缩放时间轴,寻找能让这些曲线叠合的反应级数。叠合程度与温度、物料衡算、催化剂状态和实验设计一起,为动力学解释提供依据。[6, 7]

对表观速率 v=k∏jcjnjv=k\prod_j c_j^{n_j},指定归一化物种的连续时间为 τ(t)=∫0t∏jcj(u)nj du\tau(t)=\int_0^t\prod_j c_j(u)^{n_j}\,du。在固定浓度幂下,具有共同进程函数的实验可能接近叠合;各实验需采用可比较的条件和同一进程定义。

数值核心先计算浓度中点,再取幂并累加:

τi=∑k=0i−1(tk+1−tk)∏j(cj,k+1+cj,k2)nj.\tau_i=\sum_{k=0}^{i-1}(t_{k+1}-t_k)\prod_j\left(\frac{c_{j,k+1}+c_{j,k}}{2}\right)^{n_j}.

这一规则与“先取幂、再作梯形积分”通常给出不同结果。分数幂、负级数与稀疏采样会放大差异,因此离散积分顺序是移植对照的一部分。

时间统一为 s、浓度统一为 M,归一化时间的单位为 s M∑jnj\mathrm{s}\,\mathrm{M}^{\sum_j n_j}。输入检查覆盖时间顺序及浓度幂的定义域;来源、初始浓度、温度、溶剂与单位转换随结果保存。

拟合约束与级数选择

每组曲线按相同规则对齐并缩放浓度,归一化时间在全局拟合前统一缩放。拟合可选择过原点、多项式或单调约束多项式,全部实验点共同参与评分:

RMSE⁡(n)=1N∑r,i(yr,iscaled−y^(τr,i;n))2.\operatorname{RMSE}(\mathbf n)=\sqrt{\frac{1}{N}\sum_{r,i}\left(y^{\mathrm{scaled}}_{r,i}-\hat y(\tau_{r,i};\mathbf n)\right)^2}.

该评分的单位为缩放浓度,测量不确定度与统计似然需另行指定误差模型。

两组模拟曲线经浓度幂归一化后,原生和浏览器拟合点重合。
图 6. 两组合成稀疏浓度曲线。原生与浏览器采用相同输入、级数和单调约束,离散拟合选择 nA=1.22n_A=1.22。

级数搜索先评价粗网格,再细化较优区域,并保存各已评价点的评分。对选定级数重新拟合后,核对评分与搜索记录的一致性。本组合成输入中,单调和普通多项式拟合选择 1.22,过原点拟合选择 0.80;两套实现的选择相同。该比较量化拟合约束对所选表观级数的影响。

评分与独立数组验证

参考数据包含 32 个固定测试输入及相应求解器路径的输出。逐项比较数组长度、字段、字符串、布尔值、归一化时间、最优级数、评分曲面、拟合曲线、残差和警告;求解器参数要求精确一致。[8]

三种拟合模型的离散 RMSE 曲线与浏览器评分重合,最优点随模型改变。
图 7. 线为原生,空心点为浏览器;展示全部 11 个已评价点。单调与多项式选择 1.22,过原点选择 0.80。
表 4. 数值一致性的核查边界
项目比较规则或结果
固定夹具32
比较数值13436
评分 / RMSE 容差1×10⁻⁷
其他数值容差1×10⁻⁹ + 1×10⁻⁷ |native|
最大绝对差5.150946336129891×10⁻¹¹
确认并列最优点0
显式域外拒绝4

评分与叠合 RMSE 使用 10⁻⁷ 绝对容差,其他数值采用 ∣xb−xn∣≤10−9+10−7∣xn∣|x_b-x_n|\leq10^{-9}+10^{-7}|x_n|。本组最优点一致,13436 个数值的最大绝对差为 5.1509×10⁻¹¹,来自 500 观测测试输入的缩放残差。

归档探针的总体状态为 blocked,独立逐字段验证状态为 numeric-passed,两项记录分别保留。四个超出输入范围的测试用例保存原生结果,并核查浏览器返回对应域限制。这样同时检验范围内的拟合结果与范围外的处理规则。

两个产品导出另外覆盖 3610 个数值,最大差为 8.8818×10⁻¹⁶。离线记录使用完整缓存的运行时与依赖。

残差与级数敏感性

残差图能直接显示这些影响:不同拟合方式选出的级数发生变化,同一拟合方式下原生与浏览器的残差却几乎重合。结合逐点残差和评分曲线,可以分辨拟合假设带来的偏差与程序移植带来的数值差异。

三种拟合的残差与选中级数,原生和浏览器逐点重合。
图 8. 同一合成输入,线为原生,空心点为浏览器;颜色区分两组实验。横轴为原时间,纵轴为缩放浓度残差,各模型采用自己的选中级数。

评分包络(score envelope) 保留满足 S≤Smin⁡(1+ε)+10−14S\leq S_{\min}(1+\varepsilon)+10^{-14} 的已搜索点,描述指定网格与阈值下的级数敏感性。初始浓度设计、共同变化造成的级数混淆、物料衡算和 相同过量(same-excess)实验信息共同参与解释;统计置信区间需要实验重复与测量误差模型。

求解器配置与运行成本

数值核心固定 Auto-VTNA 1.2.4 与修订 4acdbd53bc38f33e2ba2fa8f50a7ba3fad93c88d。浏览器使用 Pyodide 314.0.7、Python 3.14.2、polyfit 1.0、OSQP 1.1.3 和 SCS 3.3.1。OSQP 的 eps_abs=eps_rel=10⁻⁸,SCS 回退的 eps=10⁻⁴、max_iters=100000。正常、回退、重试和全链失败均有保留验证。

单调拟合约 1.2194 秒,多项式和过原点拟合约 0.006 秒。
图 9. 2026-10-06 开发机原生与 Chromium 记录,n = 1,含各路径初始化和求解工作。资源装载另有独立计时。
表 5. 合成测试输入的单次墙钟记录,n = 1
拟合模型Native / sBrowser / s选择级数
monotonic0.0280841.21941.22
polynomial0.0020070.00621.22
origin0.0040250.00650.80

Python 科学运行时与求解器资源约 52.3 MiB。Chromium 测试中,装载运行时用了 3.2695 s,全部依赖在 3.2798 s 时就绪,两个时间从同一起点计量。WASM 线性内存为 234749952 字节,约 223.9 MiB;浏览器进程还会使用内存保存 JavaScript 对象等内容。

对同一组合成输入,浏览器的单调、多项式和过原点拟合分别约用 1.2194 s、0.0062 s 和 0.0065 s。图 9 中同时给出原生耗时,每条记录均测量一次。各拟合路径包含的初始化和求解工作不同,因此这张图呈现的是此次执行的成本;比较重复运行性能时,需要保持相同的初始化状态。

任务隔离与取消共用公共执行说明。VTNA 保留各求解路径的实测成本和运行时装载时间。

输入范围与动力学解释

浏览器域允许 2–4 组实验、最多 500 个观测、1–2 个归一化物种、1–5 阶多项式和最多 61 个评分评价,观测数与评分数乘积最多 21000,拟合须有正残差自由度。任务墙钟上限为 120 s,准入内存估算为 768 MiB。超域输入返回明确原因,网格、细化与求解器设置保持原定义。

初始浓度共同变化会混淆不同级数组合。狭窄浓度范围、低信噪比、混合与传质控制也可能形成相似叠合。催化剂失活、产物抑制与可逆性需要补充实验与动力学模型。

数据与复现

XRD 与 VTNA 的保存结果可由公开 JSON gzip 和 CSV 独立复核。XRD 数据包含 39 个固定输入及原生/浏览器峰表,按峰成员与 hklhkl 家族配对,分别计算 2θ2\theta、d 和相对强度差,并核对 19 个接受结果和 20 个预期拒绝结果。optimization.json 与 optimization.csv 提供预热标记、逐次时间和输出一致性记录,可重算硅任务的配对中位数与耗时降幅。

VTNA 数据提供原始输入、归一化时间、评分、拟合曲线和逐点残差;按记录的离散积分顺序、浓度缩放、网格与拟合约束重建曲线,并采用本文逐字段容差比较。重新运行 XRD 使用固定 pymatgen 与散射系数,VTNA 使用固定 Auto-VTNA、数值依赖和求解器配置。公开附件支持保存数组、图表及统计量的复现。

Data and sources

  1. pymatgen: XRDCalculator and powder diffraction model
  2. Mol2Mat: archived XRD evidence and source identities
  3. Crystallography Open Database: theoretical Si record 1512541
  4. NIST JARVIS-DFT: structural data and calculation provenance
  5. Mol2Mat: paired real-Worker scheduling and state-reuse measurements, 2026-10-10
  6. D. Dalland, L. Schrecker, K. K. Hii. Auto-VTNA: an automatic VTNA platform for determination of global rate laws. Digital Discovery 3, 2118–2129 (2024). doi:10.1039/D4DD00111G
  7. J. Burés. Variable Time Normalization Analysis: General Graphical Elucidation of Reaction Orders from Concentration Profiles. Angewandte Chemie International Edition 55, 16084–16087 (2016). doi:10.1002/anie.201609757
  8. Mol2Mat: frozen VTNA sources, browser arrays and verification
  9. Auto-VTNA upstream source and usage documentation
  10. Pyodide: Python scientific runtime for WebAssembly