不确定性
Sounio 如何表示并(最终)传播测量不确定性。
不确定性
科学计算代码充满测量,而测量永远不可能完全精确。Sounio 将不确定性视为 一等数据,而不是只写在注释或表格里的信息。
今天可用的部分(编译器现状)
编译器对 Knowledge<T> 强制 “不允许静默 unwrap” 规则(见 Knowledge<T>)。这给了你一个可靠的边界: 认识论信息只能在明确的地方被有意丢弃。
除此之外,完整的自动不确定性传播取决于你使用多少认识论 stdlib,以及启用了哪些编译器特性/后端。
在规范中 / 预期语义
预期模型遵循标准计量学实践(独立输入的 GUM 风格传播):
- 对于
c = a ± b:u(c) = sqrt(u(a)^2 + u(b)^2)
- 对于
c = a * b或c = a / b(相对形式):u_rel(c) = sqrt(u_rel(a)^2 + u_rel(b)^2), 其中u_rel(x) = u(x) / x
在语言层面,目标是对 Knowledge<T> 的操作能够:
- 计算新的点估计
- 传播不确定性 -(必要时)更新置信度
- 追加溯源信息
实用建议
- 尽可能保持值为
Knowledge<T>。 - 当必须跨越到“普通数据”时,使用
unwrap(reason)并记录原因。 - 对于 PK/PD、神经影像等领域代码,优先使用已经显式建模不确定性与溯源的 stdlib 模块。