import numpy as np
rng = np.random.default_rng(0)
W = np.array([[0, 0, 0], # x1 = e1
[0.8, 0, 0], # x2 = 0.8 x1 + e2
[0, -0.5, 0]]) # x3 = -0.5 x2 + e3
S = np.diag([1.0, 0.6, 0.3])
U = np.linalg.inv(np.eye(3) - W)
Sigma = U @ S**2 @ U.T
X = (U @ S @ rng.standard_normal((3, 100_000))).T
print(np.round(Sigma, 3)); print(np.round(np.cov(X.T), 3))[[ 1. 0.8 -0.4 ]
[ 0.8 1. -0.5 ]
[-0.4 -0.5 0.34]]
[[ 1. 0.801 -0.401]
[ 0.801 1.004 -0.502]
[-0.401 -0.502 0.341]]











