%Generator zbiorów danych do klasyfikacji.
%Program skopiuj do swojego katalogu i nazwij gener_zbiorow.m.
%Program wywo³uje sie z linii poleceñ podaj¹c numer sekcji, wariant oraz liczbê punktów  
%np. [A_trn,B_trn]=gener_zbiorow(1.1,1,20) - generacja zbioru treningowego
%[A_tst,B_tst]=gener_zbiorow(1.1,1,20) - generacja zbioru testowego.
%Uwaga - nie zmieniaj kodu Ÿród³owego tej funkcji z wyj¹tkiem wpisania roku kalendarzowego rk!

function [A,B]=gener_zbiorow(nr_gr,wariant,lp)
%nr_gr - nr podgrupy np. 1.1, 1.2, ...
%wariant - 1 - zbiory A i B separowalne liniowo, 2 - separowalne
%nieliniowo, 3 - czêœciowo pokrywaj¹ce siê
%lp - liczba punktów w zbiorach A i B

rk=2014; %uwaga! tutaj wpisz aktualny rok kalendarzowy 

rand('state',nr_gr*rk);
if wariant==1
    Ap=[0.1 0.9; 0.5+rand*0.5 0.5-rand*0.5];
    [A,B]=gener_AB(Ap,Ap,lp,lp,1,1);
elseif wariant==2
    Ap=[0.1 0.4 0.9; 0.5-rand*0.5 0.5+rand*0.2 0.5-rand*0.5];
    [A,B]=gener_AB(Ap,Ap,lp,lp,2,2);
elseif wariant==3
    Ap=[0.1 0.4 0.9; 0.5-rand*0.5 0.5+rand*0.3 0.5-rand*0.5];
    Bp=[0.1 0.25 0.55 0.7 1; 0.5+rand*0.1 0.4-rand*0.3 0.4+rand*0.2 0.5 0.1];
    [A,B]=gener_AB(Ap,Bp,lp,lp,2,4);
 end;
 
 %generator dwóch zbiorów do klasyfikacji
function [A,B]=gener_AB(Ap,Bp,Al,Bl,Ast,Bst)
%Ap - macierz wspó³rzêdnych punktów poni¿ej których generowany bêdzie zbiór A, wspó³rzêdne te s¹ z zakresu (0, 1);
%   Ap=[x1 x2 ... xn;
%       y1 y2 ... yn];      
%Bp - macierz wspó³rzêdnych punktów powy¿ej których generowany bêdzie zbiór B, wspó³rzêdne te s¹ z zakresu (0, 1);
%   Bp=[x1 x2 ... xm;
%       y1 y2 ... ym];      
%Al, Bl - licznoœci punktów w zbiorach A i B
%Ast,Bst - stopnie wielomianów aproksymuj¹cych punkty Ap i Bp
hold off;

Aw=polyfit(Ap(1,:),Ap(2,:),Ast);
Bw=polyfit(Bp(1,:),Bp(2,:),Bst);

rand('state',sum(100*clock));
ll=0; i=0;
while (ll<Al)&(i<Al*100)
    x=rand;
    y=rand;
    ymax=polyval(Aw,x);
    if (ymax>=0)&(ymax<=1)&(y<ymax)
        ll=ll+1;
        A(1,ll)=x;
        A(2,ll)=y;
    end;
    i=i+1;
end;

ll=0; i=0;
while (ll<Bl)&(i<Bl*100)
    x=rand;
    y=rand;
    ymin=polyval(Bw,x);
    if (ymin>=0)&(ymin<=1)&(y>ymin)
        ll=ll+1;
        B(1,ll)=x;
        B(2,ll)=y;
    end;
    i=i+1;
end;

figure(2);
plot(A(1,:),A(2,:),'ro');
hold on;
plot(B(1,:),B(2,:),'bx');
plot(Ap(1,:),Ap(2,:),'r.');
plot(Bp(1,:),Bp(2,:),'b.');
v=0:0.02:1;
plot(v,polyval(Aw,v),'r--');
plot(v,polyval(Bw,v),'b--');
xlim([0 1]);
ylim([0 1]);
xlim([0 1]);
ylim([0 1]);
xlabel('x1');
ylabel('x2');
%hold off;