
% wartosci losowe
rand('state',sum(100*clock))
a=-5;
b=5;
% minimalne i maksymalne wartosci
xmin=-5;
xmax=5;

% +1:
X=[-3,-2,-1,-1,-3,-3, 1,-1, 2, 2,-2, 3, 2, 3, 4, 5, 6,-3,-4,-5,-2, 1,
   -1,-2,-1, 1, 1 ,3,-1, 3,-2,-3, 5,-4, 2, 3, 4, 5, 6,-3,-4,-5, 2,-3,%];
   -1, 2,-1, 3,-4 ,1,-4, 4,-4,-4, 4,-4, 4,-4, 4,-3, 3, 3, 4,-4, 3, 3];
Z=[+1,+1,+1,+1,+1,+1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 1, 1, 1, 1, 1];

X=[-4, -1,  1,  3,  3,  5,
   -1,  2,  3, -2, -5,  5,
   -4,  4,  4, -4, -4,  4];
Z=[1, -1, -1,  1,  1, -1];

X=[0, 0, 1, 1,
   0, 1, 0, 1];
Z=[-1,-1,-1,1];

X0=1;
eta=0.1;
kroczek=0;

% Wagi losowe

W=[ceil(a + (b-a).*rand(1,1)), % w1
   ceil(a + (b-a).*rand(1,1)), % w2
%   ceil(a + (b-a).*rand(1,1)), % w3
   ceil(a + (b-a).*rand(1,1))]; % w0

W
[rozy,rozx] = size(W);
czy_koniec=0;
[ry,rx]=size(X);
while (1)
    
czy_koniec=0;     
for b=1:rx
    y=0;
    
    for a=1:rozy-1
        y=y+(W(a) * X(a,b));
    end;
    
        y=y+(W(rozy) * X0);

        if (y>0)
            y=1;
        else
            y=-1;
        end;
        
        
        for a=1:rozy-1
          delta_w=eta * X(a,b) * (Z(b)-y);
          W(a)=W(a) + delta_w;

            if (delta_w~=0)
               czy_koniec=1;
            end;
          
        end;
        
          W(rozy)=W(rozy) + (eta*(Z(b)-y));
          
                   

    % wyswietlanie 2D
    if (size(X,1)==2)
        clf;
        xlim([xmin xmax]);
        ylim([xmin xmax]);
        hold on;
        red=find(Z>0);
        blue=find(Z<0);
        plot(X(1,blue),X(2,blue),'bo',X(1,red),X(2,red),'ro');axis off;

        x=[xmin xmax];

        if (W(2)~=0)
            y=(-W(1)*x-W(3))/W(2);
        else
            y=zeros(size(x));
        end;
        
        line(x,y);
        tekst=sprintf('%d',b);
        text(1,1,tekst);
        hold off;
        pause(0.1);
    end;

    % wyswietlanie 3D
    if (size(X,1)==3)
        clf;
        axis([xmin xmax xmin xmax xmin xmax]);
        hold on;
        red=find(Z>0);
        blue=find(Z<0);
        plot3(X(1,red), X(2,red), X(3,red),'ro');
        plot3(X(1,blue),X(2,blue),X(3,blue),'bo');
        [X1,X2]=meshgrid(-5:1:5,-5:1:5);
        we = -1 / W(3)*(W(4)+(W(1)*X1)+(W(2)*X2));
        mesh(X1,X2,we);
        hold off;
        pause(0.1);
    end;
    
end;

          if (czy_koniec==0)
              W
             return ;
          end;

kroczek=kroczek+1    
end;

W
kroczek
