function good = gdiam(n,A0,xx,mask) global locm locm = mask; m = size(A0,1); global A C C = zeros(m,1); C(2)=1; A = A0; h = strict(A); k1 = sum(h.^(0:(n-1))); k2 = h^(n-1); y = 0; GG = []; for k=1:m g = gamma(n,xx{k}); %y = y + gamma(n,xx{k}); GG = [GG;g']; end s1 = abs(sum(max(GG))); s2 = abs(sum(min(GG))); y = max(s1,s2); good = (y <= k1 + k2*diam(xx) + 1e-10); keyboard return function r = F(x) global locm r = applymask(locm,x); return function r = applymask(mask,x) n = length(x); r = 0; for i=1:n r = r + ismember(x(i),mask{i}); end return function r = phin(n,x) global locm r = applymask(locm(n:end),x); return function p = p_0(x) global C p = C(x); return function p = p_n(i,j,n) % primitive cond prob global A if i p = A(i,j,n); else p = 1; end return function y=mu(n,k) global locm mm = locm{n}; y = ismember(k,mm); return function [Ak,Bk] = getAB(n) global A [m,m,t] = size(A); Ak = zeros(m,1); Bk = zeros(m,1); if n==2 for k=1:m Ak(k) = p_n(k,1,n-1)*mu(1,1) - p_n(k,2,n-1)*mu(1,2) + mu(2,k)*( p_n(k,1,n-1) - p_n(k,2,n-1) ); Bk(k) = p_n(k,1,n-1) - p_n(k,2,n-1); end else [Ak0,Bk0] = getAB(n-1); pkk = A(:,:,n-1); mk = zeros(m,1); for k=1:m mk(k) = mu(n,k); end Bk = pkk * Bk0; Ak = pkk * Ak0 + Bk.*mk; %for k=1:m % Ak(k) = 0; % %Bk(k) = 0; % for k1=1:m % %Ak(k) = Ak(k) + p_n(k,k1,n-1)*(Ak0(k1)+Bk0(k1)*mu(n,k)); %works % Ak(k) = Ak(k) + p_n(k,k1,n-1)*Ak0(k1) + p_n(k,k1,n-1)*Bk0(k1)*mk(k); % %Bk(k) = Bk(k) + p_n(k,k1,n-1)*Bk0(k1); % end %end end return function gam = gamma(n,x) global locm [Ak,Bk] = getAB(n); gam = Ak + Bk*applymask(locm(n+1:end),x); return