% AW 02.05.05
% Have fun!
function compneuro7


% Subtractive Normalization
% and Oja Rule
tend=300;
% number of cycles
t=1;
% alpha in OJA Rula = 1/|w|^2
a = 1/(1);

%choose any initial value
b=4*a; % initial 1/length^2
w1(t) = 10; w2(t) = 9; % nice stuff
%w1(t) = 10; w2(t) = 0; % standard stuff

% initial normalizion with b
ww1 = w1(t);
ww2 = w2(t);
ww = ((w1(t))^2 + (w2(t))^2);
w1(t) = w1(t)/sqrt(ww*b);
w2(t) = w2(t)/sqrt(ww*b);

ur(1) = 1; 
ur(2) = 2;
ur(3) = 1;
ur(4) = -1; 
ur(5) = -2;
ur(6) = -1;

ul(1) = 2; 
ul(2) = 1;
ul(3) = -1;
ul(4) = -2; 
ul(5) = -1;
ul(6) = 1;

ww1start = w1(t);
ww2start = w2(t);
while (1)
    sprintf('t=%d: w1(t)= %f, w2(t)=%f',t,w1(t),w2(t))
    for k=1:6
        ww1 = w1(t);
        ww2 = w2(t);
        if (t==30)
            wwpstart = ww1+ww2;
        end;
        if(t==40)
            wwmstart = ww1-ww2;
        end;
        t = t+1;
        v = ww1*ur(k) + ww2* ul(k);
        dt = 1/100;
        %w1(t) = ww1 + dt*(v*(ur(k)-0.5*(ur(k)+ul(k))) - a*v*v*ww1);
        %w2(t) = ww2 + dt*(v*(ul(k)-0.5*(ur(k)+ul(k)))- a*v*v*ww2);
        w1(t) = ww1 + dt*(v*(ur(k)-0.5*(ur(k)+ul(k))) - a*v*v*ww1);
        w2(t) = ww2 + dt*(v*(ul(k)-0.5*(ur(k)+ul(k)))- a*v*v*ww2);
    end;
    if (t>=6*tend)
        break
    end;
end;
tmax = t;

% variables for diagonal lines
if (((ww1/ww2)-1)^2 <1)
    % main diagonal
    hr(1) = 100;
    hl(1) = 100;
    hr(2) = -100;
    hl(2) = -100;
else
    % other diagonal
    hr(1) = 100;
    hl(1) = -100;
    hr(2) = -100;
    hl(2) = 100;
end;

close all;
figure
subplot(2,1,1); 
plot(w1-w2,'LineWidth',2)
hold on;
plot(w1+w2,'LineWidth',2)
xlabel(' time steps','FontSize',14)
ylabel('w1-w2, , w1+w2','FontSize',14)
text(30.3,wwpstart,'w1+w2','FontSize',14)
text(40.3,wwmstart,'w1-w2','FontSize',14)
title('Subtractive normalization and Oja Rule','FontSize',14)
% Font Size of Axis Labels
set(gca,'FontSize',14)
if(1)
    subplot(2,1,2); 
    plot(w1,w2,'LineWidth',2)
    hold on;
    plot(hr,hl,'--m','LineWidth',2) % diagonal line
    axis([-1 1 -1 1]) 
    set(gca,'XTick',-1:1:1)
    set(gca,'YTick',-1:1:1)
    grid on
    xlabel('w1','FontSize',14)
    ylabel('w2','FontSize',14)
    text(ww1start,ww2start,'start','FontSize',14)
    text(-0.95, 0.9,'Locus plot','FontSize',14) 
    % Font Size of Axis Labels
    set(gca,'FontSize',14)


end
