Skip to content

Latest commit

 

History

History
217 lines (127 loc) · 7.84 KB

File metadata and controls

217 lines (127 loc) · 7.84 KB

DataLab 理论说明(模型、算法与输出字段)

本文档基于 DataLab 当前源码实现,目的是说明:各功能模块背后的数学模型、默认假设、以及“计算结果包含哪些内容”。若界面文案与本实现不一致,以代码行为为准。


1. 统一数据表示

1.1 多精度数值

DataLab 的核心计算统一使用 mpmathmp.mpf(多精度浮点)。多数计算入口会临时设置 mp.dps(十进制有效位数),以兼顾高精度与可重复性。

1.2 不确定度(σ)的两种输入方式

  1. 括号记号value(digits)[exp]
  • 1.2345(67) 表示 1.2345 ± 0.0067
  • 1.2345(67)[-2] 表示 (1.2345 ± 0.0067) × 10^-2
  1. 独立 σ 列:在数据表中单独提供一列 sigma(或界面指定的 σ 列)。

1.3 列名规范化与别名(x1/x2/A/B/C)

公式系统会把表头列名规范化为安全标识符(将非字母数字替换为 _,首字符为数字则加前缀),并在必要时用 _2/_3... 去重。

  • 误差传递:支持旧式 x1/x2/...,会在计算前替换为规范化列名(并可产生提示)。
  • 外推自定义公式:支持列名、x1/x2/...,并额外支持 A/B/C 指代前三列(兼容三点外推习惯)。

2. 统一“安全公式语言”(外推自定义公式 / 误差传递 / 拟合自定义模型)

三处自定义公式共享同一套解析与白名单data_extrapolation_latex_latest.py:safe_eval

2.1 语法与安全规则(AST 白名单)

  • 支持:数字、变量名、括号、+ - * / ** %、一元 +/-、函数调用(仅限白名单)。
  • 支持 Mathematica 风格:Sin[x](中括号会自动转圆括号)、^(自动转 **)。
  • 禁止:属性访问(如 a.__class__)、关键字参数、任意对象/字符串常量、以及所有不在白名单中的语法节点。
  • 错误风格:抛出与外推/误差传递一致的 ValueError,并保持一致的中文/英文双语消息结构。

2.2 支持的常数与函数(同一份白名单)

常数(区分大小写):

  • Pi, E

函数(需首字母大写):

  • 基本:Sin, Cos, Tan, Asin, Acos, Atan, Sinh, Cosh, Tanh, Asinh, Acosh, Atanh
  • 指数/对数:Exp, Log, Ln, Log10, Sqrt, Power
  • 常用:Abs, Erf, Gamma
  • 特殊函数:Zeta, Hyp0f1, Hyp1f1, Hyp2f1, PolyLog, BesselJ, BesselY, Airy

3. 序列外推(Extrapolation)

外推模块对“多列序列数据”逐行计算外推值 V 与不确定度估计 U,并返回每行的元信息(method/details)。

3.1 默认三点公式(quadratic)

对三列数据 A,B,C

  • 外推值:V = ((C - B)^2) / (B - A) + C
  • 不确定度(保守差异上界):U = max(|V-A|, |V-B|, |V-C|)

B≈A 时避免除零:退化取 V=C,并仍用上式差异定义 U

3.2 幂律外推(power_law)

幂律模型假设:

  • E(x) = E_inf + a * x^(-p)

输入:三点能量 (E1,E2,E3) 与三点基数 (x1,x2,x3)

实现步骤(高精度):

  • 计算比值 R = (E1-E2)/(E2-E3)
  • 解方程:(x1^{-p}-x2^{-p})/(x2^{-p}-x3^{-p}) = R 得指数 p
  • 求振幅:a = (E1-E2)/(x1^{-p}-x2^{-p})
  • 外推:E_inf = E1 - a*x1^{-p}

3.3 序列加速(Richardson / Shanks / Wynn ε / Levin u)

调用 mpmath 的序列加速实现,并输出 metadata(例如 error_estimatecancellation_weight 等)供诊断。

3.4 外推不确定度 U 的定义:参考列差异

除 “默认三点公式” 外,幂律外推/序列加速/自定义公式的 U 统一取:

  • U = |V - reference|

参考列默认第三列;也可指定,或使用 auto_max_diff 自动选择“与 V 差异最大的列”作为参考列,以获得更保守的 U

3.5 外推输出字段

逐行输出(核心字段):

  • value:外推值 V
  • uncertainty:外推不确定度 U
  • method:方法标识
  • details:方法相关信息(例如 reference_column、幂律的 exponent/amplitude、加速器 metadata、自定义 formula

4. 误差传递(Error Propagation)

误差传递模块对每一行带不确定度的数据,根据公式 f(x) 计算输出值与输出不确定度。

4.1 一阶误差传播公式

  • σ_f = sqrt( Σ ( ∂f/∂x_i * σ_i )^2 )

二阶(order=2)会在一阶项基础上加入 Hessian 的二阶贡献,并对输出值做均值修正(更接近 Monte Carlo 的输出均值):

  • E[f] ≈ f(μ) + 1/2 * Σ_i (∂²f/∂x_i²) * σ_i²
  • Var[f] ≈ Σ_i (∂f/∂x_i)² σ_i² + 1/2 * tr((H Σ)²)

其中 H 为 Hessian,Σ 为输入协方差矩阵;当前实现默认 Σ 为对角阵(独立假设)。

4.2 偏导数获取:符号优先,数值差分兜底

实现优先尝试符号微分(Sympy),若失败则回退到数值差分。

数值偏导使用中心差分:

  • ∂f/∂x ≈ (f(x+h) - f(x-h)) / (2h)

步长 h 会随 mp.dps 自适应(经验上:一阶 h ~ eps^(1/3),二阶 h ~ eps^(1/4),并按 max(1,|x|) 缩放),以平衡截断误差与舍入误差。

4.3 只对“公式实际引用”的输入做传播

程序会对公式做 AST 扫描,识别实际引用的列/常数,只对这些输入计算偏导与贡献;若公式无法解析,则退回“对所有输入传播”的旧行为(保证兼容)。

4.4 贡献分解(variance contributions)

  • contrib_i = ( ∂f/∂x_i * σ_i )^2
  • σ_f^2 = Σ contrib_i

4.5 误差传递输出字段

逐行输出(核心字段):

  • value
    • Taylor order=1f(μ)(工作点处的公式值)
    • Taylor order=2≈ E[f](含均值修正)
    • Monte Carlo:样本均值
  • uncertainty:输出的标准不确定度(标准差)
  • contributions(可选):每个输入的方差贡献

5. 拟合(Fitting)

5.1 χ² 与权重

残差:r_i = y_model(x_i; p) - y_i

  • 非加权χ² = Σ r_i^2
  • 加权χ² = Σ w_i * r_i^2,常用 w_i = 1/σ_i^2

5.2 线性模型

线性模型形如 y ≈ Σ b_j φ_j(x),用 QR 分解解最小二乘;加权时对设计矩阵行做 sqrt(w_i) 缩放。

5.3 自定义/模板非线性模型

自定义模型表达式与外推/误差传递共享 safe_eval,参数偏导用同一套数值偏导(中心差分),求解用 mp.findroot∂χ²/∂p_j = 0

模板:

  • 幂律极限:A*x**(-p) + C
  • Padé(m|n):有理函数形式

5.4 协方差矩阵的含义与计算

  • J_{i,j} = ∂y_model/∂p_j(最优参数处;加权时行缩放 sqrt(w_i)
  • Cov ≈ (J^T J)^{-1} * (χ²/dof)
  • σ(p_j) = sqrt(Cov_{j,j})

若矩阵奇异/病态,会告警并把不确定度置为 NaN

5.5 统计误差与系统误差

  • 统计误差:由协方差矩阵对角线得到
  • 系统误差:未加权但提供数据 σ 时,通过整体 y±σ 重拟合估计
  • 总误差:二次和 sqrt(stat^2 + sys^2)

在桌面端:

  • 勾选“统计误差加权”时,使用 w=1/σ² 做 χ² 加权与协方差估计,并不再单独叠加系统误差(避免双计)。
  • 不勾选时,σ 会用于 y±σ 重拟合的系统误差估计。

5.6 拟合输出字段(FitResult)

  • params:参数最优值
  • param_errors_stat/sys/total:误差分量与总误差
  • covariance:协方差矩阵
  • residuals:残差序列
  • fitted_curve:拟合曲线(逐点)
  • chi2/reduced_chi2/aic/bic/r2/rmse:拟合优度指标
  • details:表达式、告警等

6. 统计平均(Statistics)

  • 算术平均(样本/总体):均值、标准差、均值标准误差
  • 加权平均(w=1/σ²):均值、σ_mean = sqrt(1/Σw)、有效点数 n_eff

7. 导出与排版

支持 CSV、LaTeX 表格与可选 PDF 编译;数值统一输出为括号不确定度 + 指数括号形式,并可选 dcolumn/siunitx 对齐。