uncertainties 把误差传播做成“一键完成”

写物理实验报告、做工程测量或拟合数据时,最怕的就是手推误差传播公式。
Python 的第三方库 uncertainties 把这件事压缩成一句话:定义一次,后面全部自动算。

核心对象:ufloat

1
2
3
4
from uncertainties import ufloat

x = ufloat(2.0, 0.1) # 2.0 ± 0.1
y = ufloat(3.0, 0.2) # 3.0 ± 0.2

任何后续运算都会实时传播误差:

1
2
z = x * y
print(z) # 6.00±0.36

支持所有常用的数学函数

1
2
3
4
from uncertainties.umath import sin, log, exp

print(sin(x)) # 0.909±0.042
print(log(x)) # 0.693±0.050

与 NumPy 无缝配合

1
2
3
4
5
6
import uncertainties.unumpy as unp
import numpy as np

a = unp.uarray([1, 2, 3], [0.1, 0.2, 0.15])
b = np.sin(a) # 逐元误差传播
print(b)

真实场景示例:圆柱体积误差

1
2
3
4
r = ufloat(1.2, 0.02)      # cm
h = ufloat(5.0, 0.1) # cm
V = np.pi * r**2 * h
print(f"V = {V:.2f}") # V = 22.62±0.56 cm³

官方链接

阅读更多