clear all;
close all;

% Inicializacao dos pesos
bold = rand-0.5;
wold = rand(1,20)-0.5;
wnew = wold;
bnew = bold;
limiar = 0.5;

% Inicializao da taxa de aprendizagem alfa
alfa = 0.001;

% Matriz de padroes de entrada


s = [2.215 2.063 
0.224 1.586 
0.294 0.651 
2.327 2.932 
2.497 2.322 
0.169 1.943 
1.274 2.428 
1.526 0.596 
2.009 2.161 
1.759 0.342 
1.367 0.938 
2.173 2.719 
0.856 1.904 
2.21 1.868 
1.587 1.642 
0.35 0.84 
1.441 0.09 
0.185 1.327 
2.764 1.149 
1.947 1.598 ];

formatted_s = s';
% Vetor de saida
     
t = [     -1
     1
     1
    -1
    -1
     1
    -1
     1
    -1
     1
     1
    -1
     1
    -1
    -1
     1
     1
     1
    -1
    -1];

ciclo = 0; 
hold on;
erqtotalanterior = 0;
erqtotalnovo = 0.1;
limite = 0.0000001;
% Treinamento da rede
while abs(erqtotalnovo-erqtotalanterior)>limite
    ciclo=ciclo+1;
    
    erqtotalanterior = erqtotalnovo;
    erqtotalnovo=0; % armazena erro quadratico total em cada ciclo
    
    
    % entrada dos padroes de treinamento
    for entrada = 1:20
        % valor liquido de entrada do neuronio
        y_liquido = wold(1)*s(entrada,1)+ wold(2)*s(entrada,2)+bold;
        %funcao de ativacao linear
        y = y_liquido;
        % calculo do erro quadratico total
        erqtotalnovo= erqtotalnovo+ 0.5*(t(entrada)-y)^2;
        % atualizacao dos pesos
        wnew(1) = wold(1) + alfa*(t(entrada)-y)*s(entrada,1); 
        wnew(2) = wold(2) + alfa*(t(entrada)-y)*s(entrada,2);
        bnew = bold + alfa*(t(entrada)-y);
        bold = bnew;
        wold = wnew ;           
    end 
    grid on;
    plot(ciclo, erqtotalnovo,'r*');
end
bnew
wnew
ciclo
% Teste da rede neural
for entrada = 1:20
        % valor liquido de entrada do neuronio
        yliquido = wnew(1)*s(entrada,1)+ wnew(2)*s(entrada,2)+bnew;
        % funcao de ativacao linear
        if yliquido >= limiar
            y = 1;
        else
            y = -1;
        end
        if(y == t(entrada))
             fprintf('Acertei, y = %2d e t = %2d \n', y, t(entrada));
        else
            fprintf('Errei, y = %2d e t = %2d \n', y, t(entrada));
        end
end





        
