clear all;
close all;

% Inicializacao dos pesos
bold = rand-0.5;
wold = rand-0.5;
wnew = wold;
bnew = bold;
limiar = 0.5;

% Inicializao da taxa de aprendizagem alfa
alfa = 0.01;

% Matriz de padroes de entrada


s = [2
    4
    6
    8
    10
    12
    14];

formatted_s = s';
% Vetor de saida
     
t = [30
    25
    22
    18
    15
    11
    10];

ciclo = 0; 
hold on;
grid on;
erqtotalanterior = 0;
erqtotalnovo = 0.1;
limite = 0.000001;
% 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:7
        % valor liquido de entrada do neuronio
        y_liquido = wold*s(entrada)+ 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 = wold + alfa*(t(entrada)-y)*s(entrada); 
        bnew = bold + alfa*(t(entrada)-y);
        bold = bnew;
        wold = wnew ;           
    end 

    plot(ciclo, erqtotalnovo,'r*');
end
bnew
wnew
ciclo

yliquido_array = [];
% Teste da rede neural
for entrada = 1:7
        % valor liquido de entrada do neuronio
        yliquido_array(entrada) = wnew*s(entrada)+bnew;
        % funcao de ativacao linear
end

figure()
plot(yliquido_array)


SUMXY = sum(times(s,t));
SUMX = sum(s);
SUMY = sum(t);
SUMX2 = sum(times(s,s));
SUMY2 = sum(times(t,t));

b = (7*SUMXY - (SUMX*SUMY))/(7*SUMX2-(SUMX^2))
a = mean(t) - b*mean(s)
r = (7*SUMXY - (SUMX * SUMY))/(sqrt(7*SUMX2 - SUMX^2)*sqrt(7*SUMY2-SUMY^2))
r2 = r^2
f = @(x) b*x+a;
ezplot( f, 0, 30 )
