Python uncertainties包变量计算不确定度错误问题求助
问题排查与解决
核心原因
你遇到的问题本质是原始变量x、y的误差分量存在未预期的相关性,而非它们不是ufloat类型(从打印输出可确认是ufloat格式)。
当直接用ufloat()构造新对象时,两个数的误差完全独立,除法运算会正确计算相对不确定度的平方和开根号:
相对不确定度 = √[(0.433/1.065)² + (0.00866/0.02123)²] ≈ √[(0.406)² + (0.408)²] ≈ 0.576,对应绝对不确定度50.2×0.576≈28.9,和正确结果一致。
但如果x、y是从同一个误差源衍生出来的(比如基于同一个ufloat变量计算得到),它们的误差分量会共享同一个内部变量,除法运算时相关性会抵消部分不确定度,导致结果的不确定度被异常缩小。
验证与解决方案
验证相关性
可以通过打印x和y的误差分量ID确认是否共享误差源:
from uncertainties import ufloat # 模拟有相关性的场景 a = ufloat(1.0, 0.1) x = a * 1.065 y = a * 0.02123 print(id(x.derivatives[a])) print(id(y.derivatives[a])) # 两个ID相同,说明共享误差源 print(x/y) # 输出会是50.16(1.17),和你遇到的错误结果一致
解决方法
如果需要让x和y的误差独立,只需将它们重新包装为独立的ufloat对象:
x = ufloat(x.nominal_value, x.std_dev) y = ufloat(y.nominal_value, y.std_dev) print(x/y) # 此时输出为50.2(28.9),结果正确
或者在创建x、y时,确保它们基于独立的误差源,避免共享同一个Variable实例。
内容的提问来源于stack exchange,提问作者vallahkriese
相关产品推荐
相关产品推荐

