function lamb=poiss_odhad(x,eps)
% ODHAD PARAMETRU POISSONOVA ROZDELENI
%  function POISSTEST(x,eps)
%   vstup:  x = nahodny vyber (vektor) nebo matice tvaru (r x 2), kde
%               prvni sloupec obsahuje varianty 0:r a druhy jejich cetnosti
%           eps (nepovinny) = rozdil hodnot pro ukonceni iterace
%   vystup: odhad parametru

% (c) Ondrej Petrik, 18.03.2010

 if nargin==1; eps=10^(-9); end

 [a,b]=size(x);
 if(a<b) x=x';[a,b]=size(x); end
 if(b==1)                           % vstup je nah. vyber
   r=max(x); cetn=zeros(r+1,1);
   for k=0:r; cetn(k+1)=sum(x==k); end;
 else r=max(x(:,1)); cetn=x(:,2);   % vstup jsou varianty a cetnosti
 end;

 n=sum(cetn);
 m=(0:r)*cetn/n;
 lamb=((0:r-1)*cetn(1:r)+cetn(r+1)*(m-poisspdf(1:r-1,m)*(1:r-1)')/(1-poisscdf(r-1,m)))/n;
 iter=0;

 while(abs(m-lamb)>eps)&&iter<500
  m=lamb;
  lamb=((0:r-1)*cetn(1:r)+cetn(r+1)*(m-poisspdf(1:r-1,m)*(1:r-1)')/(1-poisscdf(r-1,m)))/n;
  iter=iter+1;
 end;