function [Hi,i] = sa(m)
x = linspace(pi/2,2*pi,m);
Hval = @(i) H(x,i);
epsilon = 1;
Q = randstocsym(m);
a = ones(1,m)/m;
% primo stato random
i = randdisc(a);
Hi = Hval(i);
counterperm = 1;
counterstati = 1;
while (counterperm < 20)
  j = randdisc(Q(i,:));
  counterstati = counterstati+1;
  Hj = Hval(j);
  if (Hj <= Hi)
% trovato uno stato minore    
    if (i == j)
% nessun cambiamento di stato
      counterperm = counterperm+1;
    else  
% cambiamento di stato
      counterperm = 0;
      i = j;
      Hi = Hj;
    end
  else
    p = exp(-(Hj-Hi)/epsilon);
    va = randdisc([p,1-p]);
    if (va == 1)
% cambiamento di stato
      i = j;
      Hi = Hj;
      counterperm = 0;
    else
% nessun cambiamento
      counterperm = counterperm+1;
    end
  end
  epsilon = epsilon/1.01;
end
counterstati

