I would like to propagate a second order moment around a value, a lot like what Measurements.jl does, but multivariate.
n = 10 x = ones(n) gamma = randn(n,n) V = gamma'gamma # this should now be a variance covariance matrix. # We now assume that the value x has "uncertainty" given by the variance covariance matrix V # Thus, e.g., the uncertainty associated with x is V[1,1]. # The uncertainty associated with x - x should be zero. # The uncertainty associted with x + x should be V[1,1] + V[2,2] + 2V[1,2] # What would be the uncertainty of a given function f(x) ?
In the univariate case, this is precisely what
Measurements.jl does, by overloading standard operations to provide this uncertainty propagation. But is there a package to do it in a multivariate case ?
I have an idea but i am not sure this is correct. The idea is to “reduce” to Measurements.jl capacities by simply using the
gamma matrix to “standardize” x :
y = gamma \ x # y is now suppose to be "standardized", and thus : y_mes = y .\pm 1 x_mes = gamma * y # x_mes now has the wanted uncertainty V
Would that be enough ? Assuming the output of the function
f(x), the value which i want the uncertainty from, is univariate, maybe Measurements.jl would be enough ? In real word applications, obtaining the
gamma matrix is done by matrix square root or something like that.