function grafica_fdist(p, x)
%% function grafica_fdist(p, x)
%% Graficar la funcion de distribucion de una distribucion discreta (p, x)
%% p: son las probabilidades de cada valor
%% x: son los valores respectivos (en estricto orden ascendiente)
%%  Ricard Torres <rtorres@itam.mx>

   lx = length(x);
   if lx ~= length(p)
      error('Valores y probabilidades deben tener la misma longitud');
   end
   tol = 1e-10; % tolerancia para comparar magnitudes
   if abs(sum(p)-1) > tol
      error('Vectores de probabilidad deben sumar 1');
   end
   if any(x ~= sort(unique(x)))
      error('Vectores de valores deben estar en orden ascendiente estricto');
   end
   F = cumsum(p); % funcion de distribucion (suma cumulativa)
   % Rango de valores que graficaremos
   xavg = (x(end) - x(1)) / lx; % distancia media entre valores
   xmin = x(1) - xavg; % margen a la izquierda
   xmax = x(end) + xavg; % margen a la derecha
   % generar puntos para graficar funcion tipo escalera
   [xs,Fs] = stairs(x,F);
   figure; % crear nueva figura
   plot([xmin,x(1),x(1)],[0,0,F(1)],'-','Color','Blue','LineWidth',2);
   hold on;
   plot([x(end),xmax],[1,1],'-','Color','Blue','LineWidth',2);
   plot(xs,Fs,'-','Color','Blue','LineWidth',2);
   plot(x,F,'o','Color','Blue','LineWidth',2); 
   axis([xmin,xmax,-0.1,1.1]);
   xlabel('Valores'); 
   ylabel('Probabilidad acumulada');
   title('Funcion de distribucion');
   hold off
end

