ORTHOGONALIZE Orthogonalize TT/MPS Block-mu tensor. X = ORTHOGONALIZE( X ) orthogonalizes all cores of the TTeMPS_block tensor X except the supercore at position X.MU. Cores 1...X.MU-1 are left-, cores X.MU+1...end are right-orthogonalized.
0001 function res = orthogonalize( x ) 0002 %ORTHOGONALIZE Orthogonalize TT/MPS Block-mu tensor. 0003 % X = ORTHOGONALIZE( X ) orthogonalizes all cores of the TTeMPS_block tensor X 0004 % except the supercore at position X.MU. Cores 1...X.MU-1 are left-, cores X.MU+1...end 0005 % are right-orthogonalized. 0006 0007 % TTeMPS Toolbox. 0008 % Michael Steinlechner, 2013-2016 0009 % Questions and contact: michael.steinlechner@epfl.ch 0010 % BSD 2-clause license, see LICENSE.txt 0011 0012 0013 y = TTeMPS_block_to_TTeMPS( x ); 0014 yorth = orthogonalize(y, x.mu ); 0015 res = TTeMPS_block.TTeMPS_to_TTeMPS_block( yorth, x.mu, x.p ); 0016 0017 %tmp = permute( y.U{mu}, [1 2 4 3] ); 0018 %tmp = reshape( tmp, [x.rank(mu), x.size(mu)*x.p, x.rank(mu+1)]; 0019 0020 %X = TTeMPS({x.U{1:mu-1}, tmp, x.U{1:mu+1} ); 0021 0022 0023 0024 % left orthogonalization till x.mu (from left) 0025 %for i = 1:x.mu-1 0026 % [Q,R] = qr( unfold( x.U{i}, 'left' ), 0); 0027 % x.U{pos} = reshape( Q, [x.rank(pos), x.size(pos), size(Q,2)] ); 0028 % if apply 0029 % x.U{pos+1} = tensorprod_ttemps( x.U{pos+1}, R, 1); 0030 % end 0031 %end 0032 0033 %% right orthogonalization till x.mu (from right) 0034 %for i = x.order:-1:x.mu+1 0035 % 0036 %end 0037 0038 end 0039