Как решить этот общий матричный трюк Matlab - PullRequest
0 голосов
/ 22 ноября 2011

Просто общий трюк с Matlab-матрицей, который я пытаюсь понять?Что эта строка на самом деле означает логически?

S=X*X';

Что добьется S, если я перенесу какую-либо общую матрицу против себя?Спасибо

Ответы [ 2 ]

4 голосов
/ 22 ноября 2011

Если X - общая матрица NxM, то S=X*X' - это сумма внешних произведений каждого из столбцов X с ее транспонированием.Другими словами, запись X=[x1,x2,...,xM], S может быть записана как

S = ∑_i x_i * x_i'

Полученная матрица S неотрицательно определена (т. Е. Собственные значения не являются отрицательными).

Если вы рассматриваете каждый элемент в столбце X как случайную величину (всего N), а различные столбцы - как M независимые наблюдения N размерного случайного вектора, тогда S - это NxN образец ковариационной матрицы (отличается постоянной нормализацией в зависимости от ваших соглашений) строк.Точно так же S=X'*X дает вам ковариационную матрицу MxM столбцов.


Теперь, если вы начнете ограничивать универсальность и назначите специальные свойства для X, то вы начнете видеть появление шаблоновдля структуры S.Например, если X является квадратом, имеет реальные записи и является ортогональным , то S=I - единичная матрица.Если X является квадратом, имеет сложные записи и является унитарной матрицей , то S снова является единичной матрицей.

Не зная точных обстоятельств, при которых это использовалось в вашей программе, я бы предположил, что они вычисляли ковариационную матрицу.

2 голосов
/ 22 ноября 2011

Вот пример, чтобы показать, как это связано с ковариационной матрицей (как объяснено @ yoda ):

X = randn(5,3);                     %# 3 column-vectors each of dimension=5
X0 = bsxfun(@minus, X, mean(X,2));  %# zero-centered

C = (X0*X0') ./ (size(X0,2)-1)      %'# sample covariance matrix
CC = cov(X')                        %'# should return the same result
...