function poblacion = CuadratDiscrim3(x,X1,X2,X3) 
% Regla discriminante cuadratica para tres poblaciones

%CuadratDiscrim3(x,X1,X2,X3)
% Clasifica el dato x en la poblacion 1, en la 2 o en la 3
% utilizando la regla discriminante cuadratica.
% X1, X2 y X3 son muestras de las poblaciones 1, 2 y 3 respectivamente.

x = x(:) ; px = length(x) ;
[n1,p1] = size(X1) ; [n2,p2] = size(X2) ; [n3,p3] = size(X3) ;
aux1 = [p1-p2, p2-p3, p1-p3] ;
if any(aux1 ~= 0)
    error('Las matrices de datos no tienen dimensiones coherentes')
else 
    p = p1 ; clear p1 p2 p3
end    
if px ~= p
    error('El vector x no tiene dimension adecuada')
else 
    clear px
end 

mgrande = [ mean(X1) ; mean(X2) ; mean(X3) ] ;
Sgrande = [ cov(X1) ; cov(X2) ; cov(X3) ] ; 

D2 = zeros(3,1) ; 
for i = 1:3
    Si = Sgrande([(i-1)*p+1:i*p],:) ;
    mi = mgrande(i,:) ;
    D2(i,1) = log(det(Si)) + ((x'-mi) * inv(Si) * (x-mi')) ;
end
[D2min,poblacion] = min(D2) ;