% 5. gyakorlat: Lotka-Volterra egyenletek:

% 1. egyenletek: dx=x*(a-b*y); dy=y*(-c+d*x); %periodikus megoldások
% y=ragadozó; x=zsákmány
% a=szaporodási ráta; c=halálozási ráta; 
% b,d=interakció x és y közt
a=1;
b=1;
c=1;
d=1;
figure;

for d=0.1:0.1:3

max_pont=4;
min_pont=0;
lepes=0.1;
x=min_pont:lepes:max_pont;
y=min_pont:lepes:max_pont;
[X,Y]=meshgrid(x,y);

subplot(1,2,1);
% vektormezõs ábrázolás
dx=X.*(a-b*Y); 
dy=Y.*(-c+d*X);
dx=dx./ sqrt(dx.^2+dy.^2);
dy=dy./sqrt(dx.^2+dy.^2);
quiver(X,Y,dx, dy, 'k'); 
hold on;

% dx=0 és dy=0 egyenesek ábrázolása
dx0_1=zeros(1, length(y)); %
dy0_2=c/d*ones(1, length(y));
dy0_1=zeros(1, length(x)); %
dx0_2=a/b*ones(1,length(x));
plot(dx0_1, y, 'r', x, dx0_2, 'r',  x, dy0_1, 'b', dy0_2, y, 'b');

%adott pontból induló trajeltória kiszámítása
tint=[0,100];
Xinit=1;
Yinit=2;
lotka_volterra_ode=@(t,xy)[xy(1)*(a-b*xy(2)); xy(2)*(-c+d*xy(1))];
[t, xy] = ode45(lotka_volterra_ode,tint,[Xinit Yinit]); %az diffegyenletet kiszámolom
plot(xy(:,1),xy(:,2),'g');

xlim([-0.1, 4]);
ylim([-0.1, 4]);
title(['Lotka-Volterra egyenletek: dx=x*(a-b*y); dy=y*(-c+d*x), a=',num2str(a),' b=',num2str(b),' c=',num2str(c),' d=',num2str(d)]);
xlabel('x');
ylabel('y');
legend(' vektormezõ gradiense adott pontokban', 'dx=0, mert x=0', 'dx=0, mert a-b*y=0', 'dy=0, mert y=0', 'dy=0, mert -c+d*x=0');
hold off;

%egyedszámok/mennyiségek ábrázolása:
subplot(1,2,2);
plot(t, xy(:,1), 'r', t, xy(:,2), 'b');
xlim(tint);
ylim([-0.1, 5]);
xlabel('t');
ylabel('mennyiség');
legend('x: zsákmány', 'y: ragadozó')

waitforbuttonpress;
end
