function tvmarkc(m0,n0) global n m randomize n = n0; m = m0; global pstr pstr = 'tvmarkov' [Aeq0, Beq] = normab(m,m); Aeq = assembleblock({zeros(0,1),Aeq0}); LB = zeros(m^2+1,1)+1e-10; LB(end) = 1; UB = 0*LB+1; UB(end) = 1; global maxr global lstr rstr maxr = 0; while 1 A = pnormdim(rand(m),1); %c = randinseg(1,n); c = 1; x = [A(:);c]; 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 A = makepos(reshape(x(1:m^2),[m m])); c = x(end); 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); Hn = sum( h.^(0:n-1) ); %rhs = sum( h.^(0:n-1) ); tha=h; lstr = 'TV(P-c*U)'; %rstr = 'inclexcl(hh)'; rstr = '1-(1-tha)^(n-1)'; lhs = eval(lstr); rhs = eval(rstr)+1e-9; r = lhs/rhs; y = -r; if r > maxr global optP optA optc optP = P; optA = A; optc = c; 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