0001 function t = tt_matrix(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 if (nargin == 0)
0024 t1=tt_tensor;
0025 t.tt=t1;
0026 t.n=0;
0027 t.m=0;
0028 t = class(t, 'tt_matrix');
0029 return;
0030 end
0031
0032
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
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
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
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]);
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
0120 if (nargin == 1) && isa(varargin{1}, 'struct')
0121
0122 t.tt=tt_tensor(varargin{1}.tt);
0123 t.n=varargin{1}.n;
0124 t.m=varargin{1}.m;
0125 t = class(t, 'tt_matrix');
0126
0127 return;
0128 end;
0129
0130 return;