Home > tt2 > @tt_matrix > tt_matrix.m

tt_matrix

PURPOSE ^

TT_matrix class constructor

SYNOPSIS ^

function t = tt_matrix(varargin)

DESCRIPTION ^

TT_matrix class constructor
   [T]=TT_MATRIX(TT_MAT) - copy constructor
   
   [T]=TT_MATRIX(TT,N,M) - construct TT-matrix from the TT-tensor. N and M
   are the row and column mode sizes. N and M can be either numbers, or
   array of numbers 

   [T]=TT_MATRIX(CELL) - construct TT-matrix from TT1 format

   [T]=TT_MATRIX(FULL_ARR) - construct TT-matrix from a full
   2d-dimensional array FULL_ARR

 TT-Toolbox 2.2, 2009-2012

This is TT Toolbox, written by Ivan Oseledets et al.
Institute of Numerical Mathematics, Moscow, Russia
webpage: http://spring.inm.ras.ru/osel

For all questions, bugs and suggestions please mail
ivan.oseledets@gmail.com
---------------------------

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function t = tt_matrix(varargin)
0002 %TT_matrix class constructor
0003 %   [T]=TT_MATRIX(TT_MAT) - copy constructor
0004 %
0005 %   [T]=TT_MATRIX(TT,N,M) - construct TT-matrix from the TT-tensor. N and M
0006 %   are the row and column mode sizes. N and M can be either numbers, or
0007 %   array of numbers
0008 %
0009 %   [T]=TT_MATRIX(CELL) - construct TT-matrix from TT1 format
0010 %
0011 %   [T]=TT_MATRIX(FULL_ARR) - construct TT-matrix from a full
0012 %   2d-dimensional array FULL_ARR
0013 %
0014 % TT-Toolbox 2.2, 2009-2012
0015 %
0016 %This is TT Toolbox, written by Ivan Oseledets et al.
0017 %Institute of Numerical Mathematics, Moscow, Russia
0018 %webpage: http://spring.inm.ras.ru/osel
0019 %
0020 %For all questions, bugs and suggestions please mail
0021 %ivan.oseledets@gmail.com
0022 %---------------------------
0023 if (nargin == 0)
0024     t1=tt_tensor;
0025     t.tt=t1;
0026     t.n=0; %n-dimensions
0027     t.m=0; %m-dimensions
0028     t = class(t, 'tt_matrix');
0029     return;
0030 end
0031 
0032 % Copy CONSTRUCTOR
0033 if (nargin == 1) && isa(varargin{1}, 'tt_matrix')
0034     t=tt_matrix;
0035     t.tt = varargin{1}.tt;
0036     t.n = varargin{1}.n;
0037     t.m = varargin{1}.m;
0038     return;
0039 end
0040 
0041 % From tt_tensor
0042 if (isa(varargin{1}, 'tt_tensor'))
0043     tt=varargin{1};
0044     d=tt.d;
0045     if (nargin==3)&&(isa(varargin{2},'double'))&&(isa(varargin{3},'double'))
0046         n=varargin{2};
0047         m=varargin{3};
0048         if ( numel(n) == 1 )
0049             n=n*ones(d,1);
0050         end
0051         if ( numel(m) == 1 )
0052             m=m*ones(d,1);
0053         end
0054     else
0055         % Square matrix
0056         n = round(sqrt(tt.n));
0057         m = n;
0058     end;
0059     t=tt_matrix;
0060     t.n=n;
0061     t.m=m;
0062     t.tt=tt;
0063 return
0064 end
0065 
0066 %From old format
0067 if ( nargin == 1 ) && isa(varargin{1},'cell') 
0068     t=tt_matrix;
0069    tt=varargin{1};
0070    tt1=tt_mat_to_vec(tt); 
0071    t.tt=tt_tensor(tt1);
0072    d=t.tt.d;
0073    n=zeros(d,1);
0074    m=zeros(d,1);
0075    for i=1:d
0076       n(i)=size(tt{i},1);
0077       m(i)=size(tt{i},2);
0078    end
0079    t.n=n;
0080    t.m=m;
0081 end
0082 if ( nargin == 1 && isa(varargin{1},'double') || nargin ==2 && isa(varargin{1},'double') && isa(varargin{2},'double'))
0083     t=tt_matrix;
0084     b=varargin{1};
0085     if ( nargin == 2 && isa(varargin{2},'double')) 
0086       eps=varargin{2};
0087     else
0088       eps=1e-14;
0089       fprintf('Accuracy not specified, using %3.2e \n',eps);  
0090     end
0091     nm=size(b);
0092     d=numel(nm);
0093     d=d/2;
0094     n=nm(1:d);
0095     m=nm(d+1:2*d);
0096     prm=1:2*d; prm=reshape(prm,[d,2]); prm=prm';
0097     prm=reshape(prm,[1,2*d]); %Transposed permutation
0098     b=permute(b,prm); 
0099     if (numel(n.*m) == 1 )
0100       b=b(:);
0101     else
0102     b=reshape(b,n.*m);
0103     end
0104     tt=tt_tensor(b,eps);
0105     t.tt=tt;
0106     t.n=n';
0107     t.m=m';
0108 end
0109 if ( nargin == 3 && isa(varargin{1},'tt_tensor') && isa(varargin{2},'double') && isa(varargin{3},'double') )
0110     t=tt_matrix;
0111     tt=varargin{1};
0112     n=varargin{2};
0113     m=varargin{3};
0114     t.tt=tt;
0115     t.n=n;
0116     t.m=m;
0117 end
0118 
0119 % From a simple tt_matrix struct without class definition
0120 if (nargin == 1) && isa(varargin{1}, 'struct')
0121     
0122     t.tt=tt_tensor(varargin{1}.tt);
0123     t.n=varargin{1}.n; %n-dimensions
0124     t.m=varargin{1}.m; %m-dimensions
0125     t = class(t, 'tt_matrix');
0126  
0127     return;
0128 end;
0129 
0130 return;

Generated on Wed 08-Feb-2012 18:20:24 by m2html © 2005