function pdf = triangpdf(x,a,b,c)
% function pdf = triangpdf(x,a,b,c)
% Computar la funcion de densidad de probabilidad 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 densidad
% pdf: densidad correspondiente a los puntos 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

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

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

end

% Mensaje de ayuda en caso de error
function mostrar_uso()
fprintf('Uso: function pdf = triangpdf(x,a,b,c)\n');
fprintf('Computar la funcion de densidad de probabilidad 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 densidad\n');
fprintf('pdf: densidad correspondiente a los puntos x\n');
end


