function tveta(m0,n0) global n m randomize n = n0; m = m0; P0 = ones(m^n,1); P0 = P0/sum(P0); zz = P0*0 + 1e-12; oo = P0*0+1; global pstr pstr = 'tveta' Aeq = oo'; Beq = 1; global maxr global lstr rstr maxr = 0; while 1 P = rand(m^n,1); P = P/sum(P); x = [P(:)]; y = fmincon(@radrat,x,[],[],Aeq,Beq,zz,oo); 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 = radrat(P) global pstr global m n maxr global lstr rstr P = makepos(P); U = prodmeas(P,m,n); [hh,Ht,H] = gethhn(P,m,n); %alf = alphamix(P,m,n); dh = diag(hh,1); %lhs = TV(P-U); %rhs = max(diag(hh,1)); %rhs = sum(alf); %lstr = 'TV(P-U)'; %rstr = 'inclexcl(dh)'; tv = TV(P-U); lstr = 'phinorm(P-U)'; rstr = 'tv/(1-tv)'; lhs = eval(lstr); rhs = eval(rstr); r = lhs/rhs; y = -r; if r > maxr global optP optP = P; maxr = r; 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