function prodh(m0,n0) global m n randomize m = m0; n = n0; global pstr pstr = mfilename global lstr rstr global maxr maxr = 0; xdim = 2*m^n; LB = zeros(xdim,1)+1e-9; UB = 0*LB + 1; %Aeq = ones(1,xdim); Aeq = assembleblock({ones(1,m^n),ones(1,m^n)}); Beq = [1;1]; while 1 P = unifP(m,n); Q = unifP(m,n); x = [P;Q]; P = fmincon(@myobj,x,[],[],Aeq,Beq,LB,UB); fprintf('%s: PARAMS: n=%d m=%d \n',pstr,n,m); fprintf('RATIO_________________________ maxr = %1.9f \n',maxr); end return function y = myobj(x) global m n global iic P = makepos(x(1:m^n)); Q = makepos(x(m^n+1:end)); global lstr rstr pstr [hh,Ht,Hp] = gethhn(P,m,n); [hh,Ht,Hq] = gethhn(Q,m,n); PQ = tensprod(P,Q); [hh,Ht,Hpq] = gethhn(PQ,m,2*n); lstr = 'Hpq'; rstr = 'max(Hp,Hq)'; lhs = eval(lstr); rhs = eval(rstr)+1e-9; global maxr r = lhs/rhs; y = -r; if (r > maxr) global maxrP maxrP = P; maxr = r; fprintf('%s: PARAMS: n=%d m=%d \n',pstr,n,m); fprintf('RATIO_________________________ maxr = %1.9f \n',maxr); end return