%
% Análisis de un paseo aleatorio.
%
lambda = 1;
%
nmuestras = 500;
ndist     = 20;
%
dospi = 2 * pi;
path(path, '../11Rangen');
%
% Inicialización arreglo de distancias.
%
clear distlim hpasos spasos;

for idist = 1:ndist
  distlim(idist) = idist * lambda / 2;
end
%
% Lazo general de generación y análisis.
%
for idist = 1:ndist
  dlim2  = distlim(idist)^2;
  dpasos = 0;
  epasos = 0;
%
  for imuestra = 1:nmuestras
%
%   Posición inicial.
%
    x      = 0;
    y      = 0;
    theta  = 0;
    npasos = 0;
%
%   El paseo aleatorio de la presente muestra.
%
    while (1)
    
      theta     = theta + pi * (2 * rand(1) - 1);
      distancia = rexp(lambda);
      x         = x + distancia * cos(theta);
      y         = y + distancia * sin(theta);
      npasos    = npasos + 1;
      
      if ((x^2 + y^2) > dlim2)
        break;
      end
    end
%
%   Estadística acumulativa de la muestra.
%
    dpasos = dpasos + npasos;
    epasos = epasos + npasos^2;

  end
  
  hpasos(idist) = dpasos / nmuestras;
  spasos(idist) = sqrt(max(epasos / nmuestras - hpasos(idist)^2, 0) ...
                       / (nmuestras - 1));
end
%
% Ploteo.
%
close all;
figure;

errorbar(distlim, hpasos, spasos, 'or', 'MarkerFaceColor', 'r');
xlabel('Distancia alcanzada');
ylabel('Número de pasos');
