m=3 n=3 dims = repmat([m],[1 n]); [Ainf,Binf] = lipab(m,n-1); [Ainf0,Binf0] = lipab(m,n); good = 1; MD = 0; max1 = 0; all1 = []; BADmu0 = {}; BADmuK = {}; MINFAILK = {}; MINFAILF = {}; while good b = round(rand); b = 0; if b global cc A0=pnormdim(rand(m,m,n-1),1); C0 = pnormdim(rand(m,1),1); %C0 = zeros(m,1); C0(2)=1; x = optmasklp(A0,C0); K = cc; else K = zeros(m^n,1); if 0 while 1 sig = sign(randn(m,1)); if ~all(sig==sig(1)) break end end K = rand(m^n,1); % ensure signs condition for xind = 1:m^n x = ind2coord(xind,dims); s = sig(x(1)); K(xind) = K(xind)*s; end else K = randn(m^n,1); end %sumk = rand; sumk = 1; ip = find(K>=0); K(ip) = K(ip)/sum(K(ip))*sumk; in = find(K<0); K(in) = K(in)/abs(sum(K(in)))*sumk; end % generate K %load BADK3 [x,fval] = linprog(-K,Ainf0,Binf0,[],[],[],[]); if fval>0 K = -K end %mu = (K>0)'; b = round(rand); %b = 0; if b FN = randFN(m,-n,1,'no'); phi = FN{end}; phi = phi-min(phi); phi = round(phi); else phi = round(x-min(x))'; end %BADmu0 = {}; %BADmuK = {}; if 0 % ok, this nice idea is false mu0 = zeros(size(phi)); g0 = checkmu(K,phi,mu0,m,n); muK = (K>0)'; gK = checkmu(K,phi,muK,m,n); g = (g0 | gK); if ~g 'minor failure' save MINFAIL K m n keyboard end if ~g0 BADmu0{end+1} = K; save BADKK BADmu0 BADmuK end if ~gK BADmuK{end+1} = K; save BADKK BADmu0 BADmuK end fprintf(' |g0| = %d |gK| = %d \n',length(BADmu0),length(BADmuK)); end S = abs(phi*K); if 0 mu=(K>0)'; g = checkmu(K,phi,mu,m,n); if ~g 'kus im imma failure' save KUSEM K phi keyboard end end if 1 [mu,phi1,K1,maxs] = boundsumm2(K,m,n); g = (maxs+1e-8 > S); if ~g 'real major failure' save REALMAJFAIL K phi end end if 0 MU = findmu(K,phi,m,n); if isempty(MU) %'major failure' %save MAJFAIL K phi m n %keyboard MINFAILK{end+1} = K; MINFAILF{end+1} = phi; save MINFAIL MINFAILK MINFAILF m n end end % fprintf('curbad = %d \n',length(MINFAILK)); if 0 global MINDS firstmu = MINDS(1); %max1 = max(max1,firstmu); %fprintf('curmax = %d \n',max1); all1 = union(all1,firstmu); fprintf('curall = %s \n', ... num2str(all1(:)')); end %mu0 = MU{1}; %if ~all(~mu0) % 'mu=0 doesnt work' % keyboard %end if 0 load BADK3 A = ones(2); A(1,2) = -1; A(2,1) = -1; B = 2*ones(2,1); cc = zeros(2,1); LB = 0+zeros(2,1); UB = n+zeros(2,1); phi0 = phi; mmd = []; %for i=1:length(MU) for i=1 mu = MU{i}; %summuk = sum(K.*mu'); %summuk = sumk; mu = zeros(size(phi)); phi = phi0 - mu; phi1 = getK1(K.*phi',m,n); phi = phi(:); K1 = getK1(K,m,n); K1p = getK1(K.*mu',m,n); md = 0; for yind1 = 1:m^(n-1) for yind2 = yind1+1:m^(n-1) y1 = ind2coord(yind1,dims(2:n)); y2 = ind2coord(yind2,dims(2:n)); Y1 = [[1:m]' repmat(y1,[m 1])]; Y2 = [[1:m]' repmat(y2,[m 1])]; Y1ind = coord2ind(Y1,dims); Y2 = [[1:m]' repmat(y2,[m 1])]; Y2ind = coord2ind(Y2,dims); Kxy1 = K(Y1ind); Kxy2 = K(Y2ind); Fxy1 = phi(Y1ind); Fxy2 = phi(Y2ind); if 1 if rho(y1,y2)==1 %%v1 = maxphi1( phi,y1,m,n); %%v2 = -maxphi1(-phi,y2,m,n); %%d = v1*K1(yind1) - v2*K1(yind2); %%d = d + K1p(yind2) - K1p(yind1); %d = phi1(yind1) - phi1(yind2); %d = d/summuk; %md = max(abs(d),md); d12 = sum((Kxy1-Kxy2).*(Fxy2-Fxy1)); d1 = sum(Kxy1.*Fxy1 - Kxy2.*Fxy2); d2 = sum(Kxy2.*Fxy1 - Kxy1.*Fxy2); g = max(abs(d1),abs(d2)) <= abs(d12); if ~g keyboard end end else %if rho(y1,y2)==1 if 1 cc(1) = K1(yind1); cc(2) = -K1(yind2); [xmax,Mval] = linprog(-cc,A,B,[],[],LB,UB); [xmin,mval] = linprog( cc,A,B,[],[],LB,UB); Mval = - Mval; const = K1p(yind2) - K1p(yind1); d = max(abs(const + Mval),abs(const + mval)); else fv1 = randinseg(0,n); if (fv1>n-2) fv2 = fv1 - 2; else fv2 = fv1 + 2; d = fv1*K1(yind1) - fv2*K1(yind2); d = d + K1p(yind2) - K1p(yind1); end end end %if abs(d) > 1 %'problem d>1' %keyboard %end %if abs(d) > MD % false!! BADK2 % FV1 = fv1; % FV2 = fv2; % YIND1 = yind1; % YIND2 = yind2; %end md = max(abs(d),md); end end mmd(end+1) = md; end %MD = max(MD,md) % false!! BADK3 %good = good & (md<=1); good = (min(mmd)<=1); end if 0 [y1,y2,yind1,yind2] = randrho1(m,n-1); v1 = maxphi1( phi,y1,m,n); v2 = -maxphi1(-phi,y1,m,n); K1 = getK1(K,m,n); d = abs(v1*K1(yind1) - v2*K1(yind2)); md = max(d,md) good = good & (abs(d)<=1); end %keyboard % ok, this is false if 0 FN = randFN(m,-n,1,'no'); phi1 = FN{end}; FN = randFN(m,-n,1,'no'); phi2 = FN{end}; g1 = all(Ainf*(phi1-phi2)'<=Binf) g2 = all(Ainf*(phi1+phi2)<=Binf) good = (g1 & g2); end if ~good 'bad' save BADKUR K A0 C0 keyboard end end