function spectralmarkov(m0,n0) global m n randomize m = m0; n = n0; global pstr pstr = 'spectralmarkov' global lstr rstr global C C=ones(m,1)/m %C=rand(m,1); C=C/sum(C); pdim = m*m; %fdim = m; %xdim = pdim + fdim; xdim = pdim; LB = zeros(xdim,1); LB(pdim+1:end) = 0*LB(pdim+1:end) - 1e6; UB = LB*0; UB(1:pdim) = 0*UB(1:pdim) + 1; UB(pdim+1:end) = 0*UB(pdim+1:end) + 1e6; [Aeq0, Beq] = normab(m,m); %Aeq = assembleblock({Aeq0,ones(1,fdim)}); %Beq(end+1) = 0; Aeq = Aeq0; global maxr maxr = 0; while 1 A = pnormdim(rand(m),1); %f = randn(m,1); %x = [A(:);f(:)]; x = [A(:)]; y = fmincon(@radrat,x,[],[],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 global C pdim = m*m; %fdim = m; %xdim = pdim + fdim; xdim = pdim; A = makepos(reshape(x(1:pdim),[m m])); %f = x(pdim+1:end); P = markfillprob(A,C,n); ae = sort(abs(eig(A))); lam2 = ae(end-1); slam = sum(ae(1:end-1)); tha = stricthh(A); mtv = mintv(A); %rstr = 'tha'; %rstr = 'mtv'; %lstr = 'lam2'; Ln = sum(lam2.^(0:n-1)); %Ln = sum(sqrt(lam2).^(0:n-1)); [hh,Ht,Hn] = gethhn(P,m,n); hh = hh+eye(n); H2 = (max(eig(hh'*hh))); %lstr = 'TV(A*f)'; %rstr = 'lam2*TV(f)'; lstr = 'Hn'; %lstr = 'H2'; %rstr = 'Ln'; %rstr = '1/(1-lam2)'; rstr = '1/(1-slam)'; lhs = eval(lstr); rhs = eval(rstr)+1e-12; r = lhs/rhs; y = -r; global maxr if r > maxr global optA optC optf optA = A; optC = C; %optf = f; maxr = r; fprintf('%s: n=%d; m=%d; rat = %s/%s; maxr = %1.9f \n',pstr,n,m,lstr,rstr,maxr); end return