Gaussian Error Propagation for correlated variables with SymPy

Physikalisches Fortgeschrittenen-Praktikum Heidelberg, Klaus Reygers, 2021

from sympy import *
from IPython.display import display, Latex

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}}\)