0001 function [c] = mtimes(a,b)
0002
0003
0004
0005
0006
0007
0008
0009
0010 if isa(a,'double') && isa(b,'tt_tensor')
0011 d = b.d;
0012 cr1 = b.core(b.ps(1):b.ps(2)-1);
0013 cr1 = reshape(cr1, b.r(1), b.n(1)*b.r(2));
0014 if (numel(a)==1)
0015 rnew = b.r(1);
0016 else
0017 rnew = size(a,1);
0018 end;
0019 dps = rnew*b.n(1)*b.r(2) - b.r(1)*b.n(1)*b.r(2);
0020 cr1 = a*cr1;
0021
0022 c = b;
0023 c.core=c.core(b.ps(2):b.ps(d+1)-1);
0024 c.core = [cr1(:); c.core(:)];
0025 c.ps(2:d+1)=b.ps(2:d+1)+dps;
0026 c.r(1) = rnew;
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 elseif isa(a,'tt_tensor') && isa(b,'double')
0048 d = a.d;
0049 crd = a.core(a.ps(d):a.ps(d+1)-1);
0050 crd = reshape(crd, a.r(d)*a.n(d), a.r(d+1));
0051 if (numel(b)==1)
0052 rnew = a.r(d+1);
0053 else
0054 rnew = size(b,2);
0055 end;
0056 ps_new = a.ps(d) + a.r(d)*a.n(d)*rnew;
0057 crd = crd*b;
0058
0059 c = a;
0060 c.core(a.ps(d):ps_new-1)=crd(:);
0061 c.core = c.core(1:ps_new-1);
0062 c.ps(d+1)=ps_new;
0063 c.r(d+1) = rnew;
0064
0065 else
0066 error('Use mtimes(full(A),full(B)).');
0067 end