我的问题:
我在pythons不确定性包中有一系列ufloats(例如一个unarray)。 数组的所有值都有自己的错误,我需要一个funktion,它给出了关于两者的数组的平均值,错误 我在计算名义值的平均值和值误差的影响时得到了。
我有一个uarray:
2 +/- 1
3 +/- 2
4 +/- 3
需要一个funktion,它给出了数组的平均值。
由于
答案 0 :(得分:1)
除非我遗漏了某些东西,否则你可以计算sum
除以数组的长度:
from uncertainties import unumpy, ufloat
import numpy as np
arr = np.array([ufloat(2, 1), ufloat(3, 2), ufloat(4,3)])
print(sum(arr)/len(arr))
# 3.0+/-1.2
你也可以这样定义:
arr1 = unumpy.uarray([2, 3, 4], [1, 2, 3])
print(sum(arr1)/len(arr1))
# 3.0+/-1.2
uncertainties
负责其余的工作。
答案 1 :(得分:0)
假设高斯统计量,不确定性来自高斯父代分布。在这种情况下,通常通过反方差对测量值(标称值)加权。将该应用应用于一般加权平均值可以得出
$$ \ frac {\ sum_i w_i x_i} {\ sum_i w_i} = \ frac {\ sum_i x_i / \ sigma_i ^ 2} {\ sum_i 1 / \ sigma_i ^ 2} $$。
只需对此进行良好的'ol错误传播,即可得出加权平均值的不确定性,
$$ \ sqrt {\ sum_i \ frac {1} {1 / \ sum_i \ sigma_i ^ 2}} $$。
我没有句法上讲的n字长公式,但这是在简单情况下如何获得加权平均值及其不确定性的方法:
a = un.ufloat(5, 2)
b = un.ufloat(8, 4)
wavg = un.ufloat((a.n/a.s**2 + b.n/b.s**2)/(1/a.s**2 + 1/b.s**2),
np.sqrt(2/(1/a.s**2 + 1/b.s**2)))
print(wavg)
>>> 5.6+/-2.5298221281347035
正如人们所期望的那样,结果趋向于趋近于具有较小不确定性的值。这样做的好处是,测量中较小的不确定性意味着与不确定性较大的标称值相比,其关联的标称值更接近父分布中的真实值。
很抱歉缺少数学模式渲染。我认为这比尝试用单词写出数学更好。如果难以辨认,您应该可以将TeX($$的东西)拍到背面。