clc;
Dados=[1	1	-0.45	-0.41	1.09	0.45
2	1	-0.56	-0.31	1.51	0.16
3	1	0.06	0.02	1.01	0.40
4	1	-0.07	-0.09	1.45	0.26
5	1	-0.10	-0.09	1.56	0.67
6	1	-0.14	-0.07	0.71	0.28
7	1	0.04	0.01	1.50	0.71
8	1	-0.07	-0.06	1.37	0.40
9	1	0.07	-0.01	1.37	0.34
10	1	-0.14	-0.14	1.42	0.43
11	1	-0.23	-0.30	0.33	0.18
12	1	0.07	0.02	1.31	0.25
13	1	0.01	0.00	2.15	0.70
14	1	-0.28	-0.23	1.19	0.66
15	1	0.15	0.05	1.88	0.27
16	1	0.37	0.11	1.99	0.38
17	1	-0.08	-0.08	1.51	0.42
18	1	0.05	0.03	1.68	0.95
19	1	0.01	0.00	1.26	0.60
20	1	0.12	0.11	1.14	0.17
21	1	-0.28	-0.27	1.27	0.51
22	2	0.51	0.10	2.49	0.54
23	2	0.08	0.02	2.01	0.53
24	2	0.38	0.11	3.27	0.35
25	2	0.19	0.05	2.25	0.33
26	2	0.32	0.07	4.24	0.63
27	2	0.31	0.05	4.45	0.69
28	2	0.12	0.05	2.52	0.69
29	2	-0.02	0.02	2.05	0.35
30	2	0.22	0.08	2.35	0.40
31	2	0.17	0.07	1.80	0.52
32	2	0.15	0.05	2.17	0.55
33	2	-0.10	-0.01	2.50	0.58
34	2	0.14	-0.03	0.46	0.26
35	2	0.14	0.07	2.61	0.52
36	2	0.15	0.06	2.23	0.56
37	2	0.16	0.05	2.31	0.20
38	2	0.29	0.06	1.84	0.38
39	2	0.54	0.11	2.33	0.48
40	2	-0.33	-0.09	3.01	0.47
41	2	0.48	0.09	1.24	0.18
42	2	0.56	0.11	4.29	0.44
43	2	0.20	0.08	1.99	0.30
44	2	0.47	0.14	2.92	0.45
45	2	0.17	0.04	2.45	0.14
46	2	0.58	0.04	5.06	0.13];
X=Dados(:,3:end);
%A fd depende da distancia de Mahalanobis
%É baseada nas correlações entre variáveis com as quais distintos padrões
%podem ser identificados e analisados. É uma estatística útil para 
%determinar a similaridade entre uma amostra desconhecida e uma conhecida.
%Distingue-se da distância euclidiana já que tem em conta as correlações do
%conjunto de dados e é invariante à escala, ou seja, não depende da escala
%das medições.
%dMahalanobis(xl,xk)=((xl-xk).inv(S).(xl-xk)')^0.5

%variancia grupo 1
S1=cov(X(1:21,:));

%variancia grupo 2
S2=cov(X(22:end,:));
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
%          Classe 1                  |            Classe 2
%lambda(X) > 1 --> ln(lambda(X))>0,  |  lambda(X) < 1 --> ln(lambda(X)) < 0
%lambda(X) > 1 --> -ln(lambd(X))<0,  |  lambda(X) < 1 --> -ln(lambda(X)) > 0
%-2ln(lambda(x))=(x-u1)'(S1^-1)(x-u1)-(x-u2)'(S2^-1)(x-u2)+[ln|S1|-ln|S2|]
%Quando S1=S2, anula-se o ultimo colchete, e conseguimos tirar o -2 do lado
%esquerdo, chegando a funcao discriminante de Fisher.
%fdF(X)=(u1-u2)'(S^-1)x - 0.5(u1-u2)(S^-1)(u1+u2), se > 0 classe 1
%ou se (u1-u2)'(S^-1)x > 0.5(u1-u2)(S^-1)(u1+u2), classe 1
%(u1-u2)'(S^-1)x=b'x, a fdF tem uma combinacao linear das variaveis
%originais, (u1-u2)'(S^-1)=b'
%C=0.5(u1-u2)(S^-1)(u1+u2)=b'(u1+u2)/2
%recomenda-se normalizar b

%variancia combinada
S=((n1-1)*S1+(n2-1)*S2)/(n1+n2-2);
%inverso da variancia combinada
S_1=inv(S);
ux_1=mean(X(1:21,:));
ux_2=mean(X(22:end,:));
%coeficiente da combinação linear das variaveis originais (X)
b=(ux_1-ux_2)*S_1;
%quando se considera a mesma variancia temos a
%funcao discriminante linear de fisher, 

fdF=b*X(1,:)';
%ponto de corte 
mediaCorte=(ux_1+ux_2)/2;
%constante de delimitacao ou de corte
constCorte=b*mediaCorte.';
classe=2-1*(fdF>constCorte);


