function ephimarkovy(m0,n0) global m n randomize m = m0; n = n0; global pstr pstr = 'ephimarkovy' global lstr rstr global LB UB saf raf saf = 1; raf = 1e10; pdim = m*m; fdim = m^n; xdim = pdim + fdim; LB = zeros(xdim,1); LB(pdim+1:end) = 0*LB(pdim+1:end) + saf; UB = LB*0; UB(1:pdim) = 0*UB(1:pdim) + 1; UB(pdim+1:end) = 0*UB(pdim+1:end) + raf; [Aeq0, Beq] = normab(m,m); Aeq = assembleblock({Aeq0,zeros(0,fdim)}); global Ainf Binf mylinopt mylinopt = optimset('Diagnostics','off'); mylinopt = optimset('Display','off'); [Ainf,Binf] = lipab(m,n); Ain = assembleblock({zeros(0,pdim), Ainf}); Bin = Binf; global maxr maxr = 0; while 1 A = pnormdim(rand(m),1); F = randlip; x = [A(:);F(:)]; y = fmincon(@radrat,x,Ain,Bin,Aeq,Beq,LB,UB); fprintf('%s: n=%d m=%d; rat = %s/%s; maxr = %1.9f \n',pstr,n,m,lstr,rstr,maxr); end return function y = radrat(x) global m n global lstr rstr global pstr pdim = m*m; fdim = m^n; xdim = pdim + fdim; A = makepos(reshape(x(1:pdim),[m m])); [tha,hh] = stricthh(A); Hn = sum( tha.^(0:n-1) ); Hn1 = sum( tha.^(0:n-2) ); F = x(pdim+1:end); C = ones(m,1)/m; P = markfillprob(A,C,n); [U,margs] = prodmeas(P,m,n); PF1 = P'*F; P0 = markfillprob(A,C,n-1); F0 = getky(F,1,m,n,n); PF0 = P0'*F0; [th,tth] = stricthh(A); thn = th^(n-1); UF = U'*F lstr = 'pl(PF1-PF0'; rstr = 'thn*UF'; lhs = eval(lstr); rhs = eval(rstr)+1e-12; r = lhs/rhs; y = -r; global maxr if r > maxr global optP optF optA optP = P; optF = F; optA = A; maxr = r; fprintf('%s: n=%d m=%d; rat = %s/%s; maxr = %1.9f \n',pstr,n,m,lstr,rstr,maxr); end return function phi = randlip global Ainf Binf m n mylinopt saf raf K = genK(m,n); [x,fval] = linprog(-K,Ainf,Binf,[],[],0*K+saf,0*K+raf,0,mylinopt); phi = x'; return function Ky = getky(K,y,m,n,i) MN = repmat([m],[1 n]); Ky = []; mn = m^n; for ind = 1:mn z = ind2coord(ind,MN); if z(i)==y Ky(end+1) = K(ind); end end Ky = reshape(Ky,size(K(1:length(Ky)))); return