📄 nvecs.m
字号:
function u = nvecs(X,n,r,opts)
%NVECS Compute the leading mode-n vectors for a tensor.
%
% U = NVECS(X,n,r) computes the r leading eigenvalues of Xn*Xn'
% (where Xn is the mode-n matricization of X), which provides
% information about the mode-n fibers. In two-dimensions, the r
% leading mode-1 vectors are the same as the r left singular vectors
% and the r leading mode-2 vectors are the same as the r right
% singular vectors.
%
% U = NVECS(X,n,r,OPTS) specifies options:
% OPTS.eigsopts: options passed to the EIGS routine [struct('disp',0)]
% OPTS.flipsign: make each column's largest element positive [true]
%
% See also TENSOR, TENMAT, EIGS.
%
%MATLAB Tensor Toolbox.
%Copyright 2007, Sandia Corporation.
% This is the MATLAB Tensor Toolbox by Brett Bader and Tamara Kolda.
% http://csmr.ca.sandia.gov/~tgkolda/TensorToolbox.
% Copyright (2007) Sandia Corporation. Under the terms of Contract
% DE-AC04-94AL85000, there is a non-exclusive license for use of this
% work by or on behalf of the U.S. Government. Export of this data may
% require a license from the United States Government.
% The full license terms can be found in tensor_toolbox/LICENSE.txt
% $Id: nvecs.m,v 1.4 2007/01/10 01:27:31 bwbader Exp $
if ~exist('opts','var')
opts = struct;
end
if isfield(opts,'eigsopts')
eigsopts = opts.eigsopts;
else
eigsopts.disp = 0;
end
Xn = double(tenmat(X,n));
Y = Xn*Xn';
[u,d] = eigs(Y, r, 'LM', eigsopts);
if isfield(opts,'flipsign')
flipsign = opts.flipsign;
else
flipsign = true;
end
if flipsign
% Make the largest magnitude element be positive
[val,loc] = max(abs(u));
for i = 1:r
if u(loc(i),i) < 0
u(:,i) = u(:,i) * -1;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -