function [trIn,trOut]=banana(trPat, gaussianity) 
% [trIn,trOut]=banana(trPat, gaussianity)
%	Berechnet Trainingpattern
%
% Input
%		trPat             : Anzahl der zu erzeugenden Trainingspattern (def: 40)
%		gaussianity       : (def: 0.1)
% Output 
%		(trIn, trOut)     : Trainingspattern
%
%

if nargin<1, trPat=40 ; end ;
if nargin<2, gaussianity=0.1 ; end ;

ban=[3 -3 0 0; 1.1 1.1 0 0] ;

% Mixture probabilities
props=[0.4 0.6 0.2 0.3] ;
props=props/norm(props,1) ;

[numgauss,dummy]=size(props') ;

% Centres
centres=[1 1; 1.45 -1.6; 1 2; 3 1]' ;
sigmas=[0.3; 0.3; 0.2; 0.3] ;

counts=ceil(props*trPat) ;
count=sum(counts) ;

y=[] ;
x=[] ;
for i=1:numgauss,
	for j=1:counts(i),
		xn=sqrt(sigmas(i))*(gaussianity*randn(2,1)+5*rand(2,1)-2.5)/3+centres(:,i) ;
		xn(2)=xn(2) - abs(xn(1)-centres(1,i))^ban(2,i)*ban(1,i) ;
		x=[x xn] ;

		yn=zeros(2,1) ;
		if i==1, yn(1)=1 ; 
		else	 yn(2)=1 ;
		end ;
		y=[y yn] ;	
	end ;
end;

indexs=ceil(rand(1,trPat)*count) ;
trIn=x(:,indexs);
trOut=y(:, indexs) ;

figure(3) ;
clf ;
plot(trIn(1,:), trIn(2,:), 'b.') ;
hold on ;
plot(centres(1,:), centres(2,:), '*b') ;
hold off ;
pause(0)

