function ehrenfest(N,T)
% ehrenfest(N,T) T simulerar Ehrenfests urnmodell, 
% se exempel 3.3, sida 14 i Markovkompendiet. 
% N är totala antalet kulor, vilka alla vid tidpunkt 0 ligger i ena urnan.
% T är antalet dragningar.
% Funktionen ger också en plott av antal kulor i urna 1
% vid tidpunkterna j=1,2,....,T 
% Prova med t.ex. N=100 och T=300.


figure
pos=get(gcf,'posit');

N1=floor(sqrt(N));
N2=floor(N/N1);

ym=((N2+1)/(N1+1))+0.02; 

ms=100/N1;  

plot([0 0],[0 ym],'g',[1 1],[0 ym],'g',[0 1],[0 0],'g');
hold on
plot([2 2],[0 ym],'b',[3 3],[0 ym],'b',[2 3],[0 0],'b');

a=get(gca,'chi');

for i=1:6
  set(a(i),'linewi',8);
end
  
axis([-0.1 3.1 0 1.4]);

for i=1:N2
    for j=1:N1
      k=(i-1)*N1+j;
      b_(k)=plot(j/(N1+1),i/(N1+1),'ok');
      c_(k)=plot(2+j/(N1+1),i/(N1+1),'ow');
      set(b_(k),'markersize',ms);
      set(c_(k),'markersize',ms);
      set(b_(k),'markerfa','red');
      set(c_(k),'markerfa','none');	        
      set(b_(k),'markered','none');
      set(c_(k),'markered','none');
    end;
end


for j=1:(N-N1*N2)
     k=N2*N1+j;
     b_(k)=plot(j/(N1+1),(N2+1)/(N1+1),'ok');
     c_(k)=plot(2+j/(N1+1),(N2+1)/(N1+1),'ow');
     set(b_(k),'markersize',ms);
     set(c_(k),'markersize',ms);
     set(b_(k),'markerfa','red');
     set(c_(k),'markerfa','none');	        
     set(b_(k),'markered','none');
     set(c_(k),'markered','none');  
end;



set(gca,'xtickla',[]);
set(gca,'xtick',[]);
set(gca,'ytickla',[]);
set(gca,'ytick',[]);
title('Ehrenfests urnmodell');

pause(1)

n=[N 0];

k=0;

while(k<T)
    k=k+1;
    if rand(1)<n(1)/N
        set(b_(n(1)),'markerfa','none');
        set(c_(n(2)+1),'markerfa','red');
	     n=n+[-1 1];
    else 
        set(b_(n(1)+1),'markerfa','red');
        set(c_(n(2)),'markerfa','none');
        n=n+[1 -1];
    end;
    y(k)=n(1);
    pause(0.01)
end

hold off

figure
set(gcf,'posit',pos-50) 

plot(1:T,y,[0 T],[N/2 N/2])
axis([0 T 0 N])

title('Antal kulor i grön urna')
xlabel('Dragning')
ylabel('Antal')

