function dgnorm(m0,n0) global m n rDG rGD maxr rDG = 0; rGD = 0; maxr = 0; m=m0; n=n0; P=pnormdim(rand(m^n,1),1); zz = 0*P+1e-12; oo = 0*P + 1; global UTinds UTinds = []; row = 0; for i=1:n for j=i+1:n row = row + 1; UTinds(row,:) = [i j]; end end while 1 %P = pnormdim(rand(m^n,1),1); %x = fmincon(@myobj,P,[],[],oo',1,zz,oo); x = rand(size(UTinds,1),1); x = fmincon(@myobj2,x,[],[],[],[],x*0,x*0+1); fprintf('rDG = %1.5f rGD = %1.5f \n',rDG,rGD); end return function y=myobj2(x) global m n rDG rGD maxr UTinds hh = zeros(n); for t=1:size(UTinds,1) ij = UTinds(t,:); i = ij(1); j=ij(2); hh(i,j) = x(t); end hh = hh+eye(n); Dnorm = max(sum(hh,2)); sh = sqrt(hh); Gnorm = sqrt(max(eig(sh'*sh))); r1 = Dnorm/Gnorm; r2 = Gnorm/Dnorm; if r1 > rDG rDG = r1; fprintf('rDG = %1.5f rGD = %1.5f \n',rDG,rGD); end if r2 > rGD rGD = r2; fprintf('rDG = %1.5f rGD = %1.5f \n',rDG,rGD); end r = max(r1,r2); if r > maxr global maxx maxx = x; maxr = r; end y = -r; return function y=myobj(P) global m n rDG rGD maxr P = makepos(P); [hh,Ht,H] = gethhn(P,m,n); hh = hh+eye(n); Dnorm = max(sum(hh,2)); sh = sqrt(hh); Gnorm = sqrt(max(eig(sh'*sh))); r1 = Dnorm/Gnorm; r2 = Gnorm/Dnorm; if r1 > rDG rDG = r1; fprintf('rDG = %1.5f rGD = %1.5f \n',rDG,rGD); end if r2 > rGD rGD = r2; fprintf('rDG = %1.5f rGD = %1.5f \n',rDG,rGD); end r = max(r1,r2); %if r > 10 % keyboard %end if r > maxr global maxP maxP = P; maxr = r; end y = -r; return