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

%LinealDiscrim3(x,X1,X2,X3)
% Clasifica el dato x en la poblacion 1, en la 2 o en la 3
% utilizando la regla discriminante lineal.
% 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 

m1 = mean(X1) ; m2 = mean(X2) ; m3 = mean(X3) ;
S1 = cov(X1) ; S2 = cov(X2) ; S3 = cov(X3) ; 
S = ((n1-1) * S1 + (n2-1) * S2 + (n3-1) * S3)/(n1+n2+n3-3) ;

x_rep = (ones(3,1) * x') - [ m1 ; m2 ; m3 ] ;
D2 = diag( x_rep * inv(S) * x_rep' ) ;
[D2min,poblacion] = min(D2) ;