function nonaddsketch(m0,n0) global m n m = m0; n = n0; [Ainf,Binf] = lipab(m,n); global myopt myopt = optimset('Diagnostics','off'); myopt = optimset('Display','off'); global maxr maxr = 0; while 1 phi = randlip(m,n); fmincon(@myobj,phi',Ainf,Binf,[],[],0*phi',0*phi'+n); fprintf('maxr ====================================== %1.5f \n',maxr); end return function y = myobj(phi) global m n [M,err] = fadd_lsq(phi',m,n); global maxr r = err/n; y = -r; if r > maxr global optF optF = phi; maxr = r; fprintf('maxr ====================================== %1.5f \n',maxr); end return function [M,err] = fadd_lsq(phi,m,n) % least-squares additive approx to Lip. func phi global Lmf global myopt if isempty(Lmf) Lmf = getLmf(m,n); else [a,b] = size(Lmf); if ~( (a==m^n) & (b==m*n) ) Lmf = getLmf(m,n); end end H = Lmf'*Lmf; f = - phi*Lmf; x = quadprog(H,f,[],[],[],[],0*phi',0*phi'+n,[],myopt); M = reshape(x,[m n]); err = sum(abs(Lmf*x - phi')); return