function tvmarkmask(m0,n0) global n m randomize n = n0; m = m0; global pstr pstr = 'tvmarkmask' pdim = m*m; fdim = m*n; xdim = pdim + fdim; [pAeq, Beq] = normab(m,m); Aeq = assembleblock({pAeq,zeros(0,fdim)}); LB = zeros(xdim,1)+1e-9; UB = 0*LB+1; global Lmf Lmf = getLmf(m,n); global maxr global lstr rstr maxr = 0; while 1 A = pnormdim(rand(m),1); M = rand(m,n); x = [A(:);M(:)]; y = fmincon(@myobj,x,[],[],Aeq,Beq,LB,UB); fprintf('%s: n=%d m=%d; rat = %s/%s; maxr = %1.9f \n',pstr,n,m,lstr,rstr,maxr); %fprintf('%s: n=%d; maxr = %1.9f \n',pstr,n,maxr); end return function y = myobj(x) global pstr global m n maxr global lstr rstr pdim = m*m; fdim = m*n; xdim = pdim + fdim; A = makepos(reshape(x(1:pdim),[m m])); %M = reshape(x(pdim+1:end),[m n]); M = x(pdim+1:end); global Lmf mu = Lmf * M C = ones(m,1)/m; P = markfillprob(A,C,n); U = prodmeas(P,m,n); %lhs = TV(P-U); %rhs = h + 1e-9; %lhs = phinorm(P-U); [h,hh] = stricthh(A); %rhs = sum( h.^(0:n-1) ); %tha=h; %[hh,Ht,H] = gethhn(P,m,n); %inex = 0; %for k=1:n-1 % inex = inex + inclexcl(diag(hh,k)); %end muPU = abs(mu'*(P-U)) keyboard lstr = 'muPU'; %lstr = 'psinorm(P-U,m,n)'; %lstr = 'TV(P-U)'; rstr = 'sum(h.^(0:n-1))'; %rstr = 'tha/(1-tha)'; %hh = repmat([h],[1 n-1]); %hn = h.^(1:n-1); % NO %rstr = 'inclexcl(hh)'; %rstr = 'inex'; lhs = eval(lstr); rhs = eval(rstr)+1e-9; r = lhs/rhs; y = -r; if r > maxr global optP optA optP = P; optA = A; maxr = r; %fprintf('%s: n=%d; maxr = %1.9f \n',pstr,n,maxr); fprintf('%s: n=%d m=%d; rat = %s/%s; maxr = %1.9f \n',pstr,n,m,lstr,rstr,maxr); end return