奇异值分解正值

时间:2015-04-01 12:06:16

标签: matlab svd

我正在使用奇异值分解(SVD)应用于时间序列的奇异谱分析(SSA)。

% original time series
x1= rand(1,10000);
N = length(x1);

% windows for trajectory matrix
L = 600;
K=N-L+1; 

% trajectory matrix/matrix of lagged vectors
X = buffer(x1, L, L-1, 'nodelay'); 

% Covariance matrix
A = X * X' / K;

% SVD
[U, S_temp, ~] = svd(A);


% The eigenvalues of A are the squared eigenvalues of X
S = sqrt(S_temp);
d = diag(S);
% Principal components
V = X' * U;
for i = 1 : L
    V(:, i) = V(:, i) / d(i);             
end

我想知道是否有办法让奇异分量(即V列)始终为正。

X总是>在我的情况下为0(以及协方差矩阵A)

1 个答案:

答案 0 :(得分:1)

您可能正在寻找一种算法,例如non-negative matrix factorization

这可以在nnmf命令的统计工具箱中找到,并且还有一个免费提供的第三方toolbox