Каждый xi
должен быть вектором (случайной величиной) со своей собственной дисперсией и средним значением.
Ковариационная матрица симметрична, поэтому вам просто нужно вычислить половину ее (и скопировать остальную) и иметь дисперсию xi на главной диагонали.
S = ...// your symmetric matrix n*n
for(int i=0; i<n;i++)
S(i,i) = var(xi);
for(j = i+1; j<n; j++)
S(i,j) = cov(xi, xj);
S(j,i) = S(i,j);
end
end
где дисперсия (вар) xi:
v = 0;
for(int i = 0; i<xi.Count; i++)
v += (xi(i) - mean(xi))^2;
end
v = v / xi.Count;
и ковариация (cov)
cov(xi, xj) = r(xi,xj) * sqrt(var(xi)) * sqrt(var(xj))
, где r(xi, xj)
- Коэффициент корреляции Пирсона и момента произведения
EDIT
или, поскольку cov (X, Y) = E (X * Y) - E (X) * E (Y)
cov(xi, xj) = mean(xi.*xj) - mean(xi)*mean(xj);
где .*
- поэлементное умножение, подобное Matlab.
Так что если x = [x1, x2]
, y = [y1, y2]
, то z = x.*y = [x1*y1, x2*y2]
;