function cdf = triangcdf(x,a,b,c)
% function cdf = triangcdf(x,a,b,c)
% Computar la funcion de distribucion de una distribucion
% triangular caracterizada por los parametros:
% [a,b]: extremos del intervalo donde hay probabilidad positiva
% c: (donde a <= c <= b) indica la localización del vertice del 
% triangulo que forma la funcion de densidad
% x: escalar o vector que indica los numeros realos de los que deseamos
% computar la funcion de distribucion
% cdf: valor de la funcion de distribucion en x
% Ricard Torres (rtorres@itam.mx)

if ( nargin ~= 4 )
   mostrar_uso();
   error('La funcion requiere cuatro argumentos');
end

if ~ and( isvector(x), and( isscalar(a), and( isscalar(b), ...
         isscalar(c) )))
   mostrar_uso();
   error('Los argumentos deben ser numericos');
end

if ( ( a > c ) || ( c > b ) || ( a >= b ) )
   mostrar_uso();
   error('Se debe cumplir: a <= c <= b, a < b');
end

cdf = []; % definir cdf como un vector sin ningun elemento

for y = x
    if ( y < a )
       cdf(end+1) = 0;
    elseif ( y <= c )
       if ( c == a ) 
       cdf(end+1) = 0;
       else
       cdf(end+1) = (y-a)^2/( (b-a) * (c-a) );
       end
    elseif ( y <= b )
       if ( c == b ) 
       cdf(end+1) = 1;
       else
       cdf(end+1) = 1 - (b-y)^2/( (b-a) * (b-c) );
       end
    else
       cdf(end+1) = 1;
    end
end

end

% Mensaje de ayuda en caso de error
function mostrar_uso()
fprintf('Uso: function cdf = triangcdf(x,a,b,c)\n');
fprintf('Computar la funcion de distribucion de una distribucion\n');
fprintf('triangular caracterizada por los parametros:\n');
fprintf('[a,b]: extremos del intervalo donde hay probabilidad positiva\n');
fprintf('c: (donde a <= c <= b) indica la localización del vertice del \n');
fprintf('triangulo que forma la funcion de densidad\n');
fprintf('x: escalar o vector que indica los numeros realos de los que\n');
fprintf('deseamos computar la funcion de distribucion\n');
fprintf('cdf: funcion de distribucion en x\n');
end


