0001 function [res] = tt_mvdot(a_tt,x_tt,y_tt)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 d=size(a_tt,1);
0017
0018 core=a_tt{1}; matx=x_tt{1}; maty=y_tt{1};
0019 n1=size(core,1); n2=size(core,2);
0020 rc=size(core,3);
0021 rx=size(matx,2); ry=size(maty,2);
0022 core=maty'*reshape(core,[n1,n2*rc]);
0023 core=reshape(permute(reshape(core,[ry,n2,rc]),[3,1,2]),[rc*ry,n2]);
0024 phi=permute(reshape(core*matx,[rc,ry,rx]),[1,3,2]);
0025
0026 for i=2:d-1
0027 core=a_tt{i}; core_x = x_tt{i}; core_y=y_tt{i};
0028
0029 n1=size(core,1); n2=size(core,2); rc1=size(core,3); rc2=size(core,4);
0030 rx1=size(core_x,2); rx2=size(core_x,3); ry1=size(core_y,2); ry2=size(core_y,3);
0031
0032
0033 core=reshape(permute(core,[3,1,2,4,5]),[rc1,n1*n2*rc2]);
0034 phi=reshape(phi,[rc1,rx1*ry1])'*core;
0035
0036 phi=permute(reshape(phi,[rx1,ry1,n1,n2,rc2]),[4,1,2,3,5]);
0037
0038 phi=reshape(core_x,[n2*rx1,rx2])'*reshape(phi,[n2*rx1,ry1*n1*rc2]);
0039
0040
0041 phi=reshape(phi,[rx2,ry1*n1,rc2]); phi=permute(phi,[3,1,2]);
0042
0043 phi=reshape(phi,[rc2*rx2,ry1*n1])*reshape(permute(core_y,[2,1,3]),[ry1*n1,ry2]);
0044 phi=reshape(phi,[rc2,rx2,ry2]);
0045 end
0046 core=a_tt{d}; mat_x=x_tt{d}; mat_y=y_tt{d};
0047 n1=size(core,1); n2=size(core,2); rc=size(core,3);
0048 rx=size(mat_x,2); ry=size(mat_y,2);
0049
0050
0051 phi=reshape(core,[n1*n2,rc])*reshape(phi,[rc,rx*ry]);
0052
0053
0054 phi=permute(reshape(phi,[n1,n2*rx,ry]),[1,3,2]);
0055 phi=reshape(phi,[n1*ry,n2*rx])*reshape(mat_x,[n2*rx,1]);
0056
0057 res= phi'*reshape(mat_y,[n1*ry,1]);
0058
0059 return
0060
0061 end