from sympy import *
from IPython.display import display, LatexGaussian Error Propagation for correlated variables with SymPy
Physikalisches Fortgeschrittenen-Praktikum Heidelberg, Klaus Reygers, 2021
Define function for symbolic Gaussian error propagation
This is based on symbolic math package sympy.
def error_prop_corr(f, x, V):
"""
f: function f = f(x[0], x[1], ...)
x: list of variables
V: covariance matrix (python 2d list)
"""
sum = S(0) # empty sympy expression
for i in range(len(x)):
for j in range(len(x)):
sum += diff(f, x[i]) * diff(f, x[j]) * V[i][j]
return sqrt(simplify(sum))Example
x, y, sigma_x, sigma_y, n = symbols('x, y, sigma_x, sigma_y, n', positive=True)
rho = Symbol("rho", real=True)
# covariance matrix
C = [[sigma_x**2, rho * sigma_x * sigma_y], [rho * sigma_x * sigma_y, sigma_y**2]]
z = x + y
vars = [x, y]
sigma_z = error_prop_corr(z, vars, C)
sigma_z\(\displaystyle \sqrt{2 \rho \sigma_{x} \sigma_{y} + \sigma_{x}^{2} + \sigma_{y}^{2}}\)