function [A,fval,f] = mylpn2(h) % correct stricture %global A0 global C global nstate C = zeros(nstate,1); C(2)=1; m = nstate; % box constraints LB = zeros(m^2,1); UB = ones(m^2,1); % normalization constraints Aeq = zeros(m,m^2); for i=1:m for j=1:m Aeq(i,m*(i-1)+j) = 1; end end Beq = ones(m,1); SIGNS = 2*list_all_ind(repmat([2],[1 m]))-3; Ain = zeros(size(SIGNS,1)*m*(m-1)/2,m^2); rind = 0; for i1 = 1:m for i2 = i1+1:m for s = 1:size(SIGNS,1) rind = rind+1; ss = SIGNS(s,:); for j=1:m ind1 = coord2ind([j i1],[m m]); ind2 = coord2ind([j i2],[m m]); Ain(rind,ind1) = ss(j); Ain(rind,ind2) = -ss(j); end end end end Bin = ones(size(Ain,1),1)*h*2; %A1 = pnormdim(rand(m,m),1); A1 = pnormdim(ones(m,m),1); f = zeros(m^2,1); for j=1:m indf = coord2ind([j 1],[m m]); c = sum(C(2:end))*F([1 j]); f(indf) = c; end for i=2:m for j=1:m indf = coord2ind([j i],[m m]); c = C(i)*F([2 j]); f(indf) = -c; end end %keyboard x0 = [A1(:)]; [xp,fvalp] = linprog( f,Ain,Bin,Aeq,Beq,LB,UB); [xn,fvaln] = linprog(-f,Ain,Bin,Aeq,Beq,LB,UB); if abs(fvalp)>abs(fvaln) x = xp; fval = fvalp; else x = xn; fval = fvaln; end A = reshape(x(1:nstate^2),[nstate nstate]); return %function [h,i1,i2] = strict(A) function h = strict(x) A = reshape(x(1:nstate^2),[nstate nstate]); [n,n,T] = size(A); h = 0; i1 = 0; i2 = 0; for t=1:T for i=1:n %for i=1 for j=i+1:n x = A(:,i); y = A(:,j); d = .5*sum(abs(x-y)); if d>h i1=i; i2=j; h=d; end end end end return function r = F(x) %r = length(find(x~=1)); %return global nstate lenseq = length(x); global FN FF = FN{lenseq}; ind = coord2ind(x,(repmat(nstate,1,lenseq))); r = FF(ind); return