Home > manopt > manifolds > ttfixedrank > TTeMPS_1.1 > @TTeMPS > mergecore.m

# mergecore

## PURPOSE

MERGECORE Merging of two cores of a TT/MPS tensor.

## SYNOPSIS

function res = mergecore( x, idxL, idxR )

## DESCRIPTION

```MERGECORE Merging of two cores of a TT/MPS tensor.

RES = MERGECORE(X, IDXL, IDXR) merges the two cores IDXL and IDXR of
the TT/MPS tensor X. IDXL and IDXR must be two consecutive integers in
ascending order. RES is a TT/MPS tensor of dimension X.order-1.

## CROSS-REFERENCE INFORMATION

This function calls:
This function is called by:

## SOURCE CODE

```0001 function res = mergecore( x, idxL, idxR )
0002     %MERGECORE Merging of two cores of a TT/MPS tensor.
0003     %
0004     %   RES = MERGECORE(X, IDXL, IDXR) merges the two cores IDXL and IDXR of
0005     %   the TT/MPS tensor X. IDXL and IDXR must be two consecutive integers in
0006     %   ascending order. RES is a TT/MPS tensor of dimension X.order-1.
0007     %
0009
0010     %   TTeMPS Toolbox.
0011     %   Michael Steinlechner, 2013-2016
0012     %   Questions and contact: michael.steinlechner@epfl.ch
0014
0015     if ~isscalar(idxL)
0016          error('Left index IDXL must be a scalar.')
0017     end
0018     if ~isscalar(idxR)
0019          error('Right index IDXR must be a scalar.')
0020     end
0021     if diff([idxL,idxR]) ~= 1
0022         error('Choose two neighboring nodes in ascending order.')
0023     end
0024
0025     n = x.size;
0026     r = x.rank;
0027
0028     mergedcore = unfold(x.U{idxL}, 'left') * unfold(x.U{idxR}, 'right');
0029     mergedcore = reshape( mergedcore, [r(idxL), n(idxL)*n(idxR), r(idxR+1)] );
0030
0031     U = x.U;
0032     res = TTeMPS( {U{1:idxL-1}, mergedcore, U{idxR+1:end} } );
0033 end
0034```

Generated on Fri 30-Sep-2022 13:18:25 by m2html © 2005