function checkpsi11(m,n) global Ainl Binl Ain1 Bin1 GG iif n1 = n-1; phi = zeros(m^n,1); phi1 = zeros(m^n1,1); LBK = -ones(size(phi)); UBK = ones(size(phi)); LBg = zeros(size(phi)); %UBg = n+zeros(size(phi)); %LBg = -n*ones(size(phi)); UBg = n*ones(size(phi)); LBg1 = zeros(size(phi1)); UBg1 = n1+zeros(size(phi1)); [Aing,Bing] = gradab(m^n); [Ainl,Binl] = lipab(m,n); [Ain1,Bin1] = lipab(m,n1); GG = gengray(n,m); iif = invperm(GG+1); good = 1; ARG = 0; while good K = genK(m,n); %K = abs(K); if flip % opt phi [x,fval] = linprog(-K,Ainl,Binl,[],[],0*K,0*K+n); phi = x'; else % rand phi phi = randlip(m,n)'; end if phi*K < 0, K = -K; end %fs = abs(fval); Sphi = phi*K; SPsi = Psi(K,m,n); %S = sum(K.*(K>0)); %Srec = recsum(K,phi,m,n); %Srec = recsum(K,phi,m,n,min(phi)); %Srec = recsum(K,phi,m,n,0); %Srec = recsum(K,phi,m,n,n,n); Srec = Psirec(K,m,n); Sitr = itersum(K,phi,m,n); ksig = (K>0); Kpl = pl(K); Kng = pl(-K); phiks=pl(phi-ksig'); sK = sort(K); sF = sort(phi); Shlp = sF*sK; phibp = termwisebd(Kpl,phiks,m,n); phibn = termwisebd(Kng,phi,m,n); phib = pl(phibp - phibn); phib = min(phib,n1); if ~islip(phib) 'not lip' keyboard end K1 = getK1(K,m,n); if phib*K1 + 1e-8 < phiks*K 'nope' keyboard end %[x,fval] = linprog(-K,Ainl,Binl,[],[],0*K,0*K+n1); %phiks = x'; %K1 = getK1(K,m,n); [x,fval] = linprog(-K1,Ain1,Bin1,[],[],0*K1,0*K1+n1); phi1 = x'; %if phi1*K1 + 1e-7 < phiks*K % 'real bad' % keyboard %end if 0 Kf = getK1(phiks'.*K,m,n); phim = meanphi(phiks,m,n); phim = min(phim,n1); d = max(Ain1*phim'); if (d>1) phim = phim/d; end if 0 %phim = ceil(phim); %phim = meanphi(pl(phi-1),m,n); if ~islip(phim) %'not lip' %keyboard %end %if 0 %else %phim = round(phim); phim1 = floor(phim); phim2 = ceil(phim); if ~(islip(phim1) | islip(phim2)) 'not lip' save NOTLIP K phi keyboard else if islip(phim1) phim = phim1; else phim = phim2; end end end %phim = min(n1,meanphi(phi,m,n)); %phim = zeros(size(phim)); %phim = zeros(size(phim)) + (max(ceil(phim)) + min(floor(phim)))/2; end [a,b] = sort(abs(K1)); %[a,b] = sort(K1); b = b(end:-1:1); phig = greedymaxf(K1,phim,m,n,b'); %phig = phim; % BAD %Km = phim'.*K1; %iis = find(abs(K1)<1e-10); %K1(iis) = ones(size(K1(iis)))*1e-10; %phic = (Kf ./ K1)'; %phic = max(0,phic); %phic = min(n1,phic); %%iip = find(K1>0); %%phic(iip) = ceil(phic(iip)); %phic = ceil(phic); %%phic = round(phic); %islip = (max(abs(Ain1*phic'))<=1+1e-9); %if ~islip % 'not lip' % keyboard %end %[a,b] = sort(Kf); %perm = b'; %phic = collapsefperm(K,phiks,m,n,perm); %Kc = phic'.*K1; %marg = min(Kc - Kf); %phic = collapsephi(K,phiks,m,n,phi1); %phic = round(phic); %good = (phiks*K < phic*K1 + 1e-8); %marg = phic*K1 - phiks*K; marg = phig*K1 - phiks*K; %if marg + 1e-8 < 0 % 'nope' % keyboard %end if 1 if marg < MARG MARG = marg; global K0 phi0 K0=K; phi0=phi; if n==3 save FAILC3 K phi phiks phig MARG end if n==4 save FAILC4 K phi phiks phig MARG end end end fprintf('.......................curmarg = %1.9f \n',MARG); end end return function phi = randlip(m,n) global Ainl Binl Ain1 Bin1 GG iif while 1 phi = zeros(m^n,1); rp = randperm(m^n); diam = ceil(rand*m); rp = rp(1:diam); phi(rp) = ones(diam,1); phi = cumsum(phi); phi = phi(iif); if all(Ainl*phi<=Binl) break end end return