0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 nrep=10;
0017 nsample = 1;
0018 sz=[50 50 20];
0019 trfrac=0.05:0.05:0.95;
0020
0021 tol=1e-3;
0022
0023 methods = {'matrix','constraint','mixture','tucker','tuckertrue'};
0024 base_err = cumsum([0, 3, 1, 1, 1]);
0025
0026 for ll=1:nsample
0027
0028 dtrue=[7,8,9];
0029
0030
0031 for kk=1:nrep
0032 X0=randtensor3(sz,dtrue);
0033 nn=prod(sz);
0034
0035 for ii=1:length(trfrac)
0036 ntr=round(nn*trfrac(ii));
0037 ind=randperm(nn); ind=ind(1:ntr)';
0038 ind_test=setdiff(1:prod(sz), ind);
0039 [I,J,K]=ind2sub(sz,ind);
0040 yy=X0(ind);
0041
0042 for mm=1:length(methods)
0043 switch(methods{mm})
0044 case 'matrix'
0045
0046 tic;
0047 [X1,Z1,fval1,gval1]=tensor_as_matrix(zeros(sz), {I,J,K}, yy, 1, tol);
0048 time(kk,ii,mm)=toc;
0049 gval(kk,ii,mm)=max(gval1);
0050 for jj=1:ndims(X0)
0051 Xjj = flatten_adj(Z1{jj},sz,jj);
0052 err(kk,ii,base_err(mm)+jj)=norm(Xjj(ind_test)-X0(ind_test));
0053 end
0054 case 'constraint'
0055
0056 tic;
0057 [X,Z,Y,fval,gvals]=tensorconst_adm(zeros(sz),{I,J,K},yy,0,1, tol);
0058 time(kk,ii,mm)=toc;
0059 gval(kk,ii,mm)=gvals(end);
0060 err(kk,ii,base_err(mm)+1)=norm(X(ind_test)-X0(ind_test));
0061 case 'mixture'
0062
0063 tic;
0064 [X2,Z2,fval2,gval2]=tensormix_adm(zeros(sz), {I,J,K}, yy, ...
0065 0, 1, tol);
0066 time(kk,ii,mm)=toc;
0067 gval(kk,ii,mm)=gval2(end);
0068 err(kk,ii,base_err(mm)+1)=norm(X2(ind_test)-X0(ind_test));
0069 case {'tucker','tuckertrue'}
0070
0071 Xobs=zeros(sz);
0072 Xobs(ind)=X0(ind);
0073 Xobs(ind_test)=nan;
0074 Options(5)=100;
0075 if strcmp(methods{mm},'tuckertrue')
0076 dd = dtrue;
0077 else
0078 dd = round(dtrue*1.2);
0079 end
0080 tic;
0081 [Factors,G,ExplX,Xm]=tucker(Xobs, dd, Options);
0082 time(kk,ii,mm)=toc;
0083 gval(kk,ii,mm)=nan;
0084 err(kk,ii,base_err(mm)+1)=norm(Xm(ind_test)-X0(ind_test));
0085 otherwise
0086 error('Method [%s] unknown!', methods{mm});
0087 end
0088 end
0089 fprintf('frac=%g\nerr1=%s err2=%g err3=%g err4=%g err5=%g\n',...
0090 trfrac(ii), printvec(err(kk,ii,1:3)),...
0091 err(kk,ii,4), err(kk,ii,5), err(kk,ii,6), err(kk,ii,7));
0092 fprintf('time1=%g time2=%g time3=%g time4=%g time5=%g\n', time(kk,ii,1),time(kk,ii,2),time(kk,ii,3),time(kk,ii,4),time(kk,ii,5));
0093 end
0094 end
0095
0096 file_save=sprintf('result_compare5_new_%d_%d_%d_%d_%d_%d.mat',sz(1),sz(2),sz(3),dtrue(1),dtrue(2),dtrue(3));
0097
0098
0099 save(file_save,'nrep', 'sz', 'dtrue', 'methods','err', 'trfrac','gval','time');
0100
0101
0102 end
0103
0104 plot_tensorworkshop10