function myrade30(m0,n0,lb) randomize global m n n = n0; m = m0; p0 = ones(m,1); p0 = p0/sum(p0); zz = p0*0 + lb; oo = p0*0+1; Aeq = assembleblock({oo',oo'}); Beq = ones(size(Aeq,1),1); zz = [zz;zz]; oo = [oo;oo]; global maxr maxr = 0; while 1 p0 = rand(m,1); p0=p0/sum(p0); p1 = rand(m,1); p1=p1/sum(p0); x = [p0(:);p1(:)]; y = fmincon(@radrat,x,[],[],Aeq,Beq,zz,oo); fprintf('n=%d; maxr = %1.9f \n',n,maxr); end return function y = radrat(pp) global n m maxr p0 = makepos(pp(1:m)); p1 = makepos(pp(m+1:end)); P0 = p0; P1 = p1; for i=1:n-1 P0 = tensprod(P0,p0); P1 = tensprod(P1,p1); end %[hh,Ht,H0] = gethhn(P0,2,n); %[hh,Ht,H1] = gethhn(P1,2,n); v1 = Psi(P0-P1,2,n); %v2 = Ht(1)+1; r = v1; y = -r; if r > maxr global optP0 optP1 optP0 = P0; optP1 = P1; maxr = r; fprintf('n=%d; maxr = %1.9f \n',n,maxr); end return function R = radave(A,P) global SIGMA [n,m] = size(A); R = P'*max(abs(SIGMA * A),[],2); %R = P'*max((SIGMA * A),[],2); % w/o abs it's zero!!! return function B = radbound(A) [n,N] = size(A); ma = max(sqrt(sum(A.^2))); B = ma * sqrt(2*log(N))/n; return function w = A2w(A) %w = max(sum(abs(A))); w = max(abs(A),[],2); return [n,N] = size(A); w = zeros(n,1); A = abs(A); for i=1:N for j=i+1:N a = A(:,i); b = A(:,j); %d = abs(a-b); d = a+b; w = max(w,d); end end return