% 6. gyakorlat:
% általános Lotka-Volterra modell
%dx=x*(a1-b1*x+c1*y)
%dy=y*(a2-b2*y+c2*x)

% az egyensúlyban:
% a 2 faj együtt van jelen [ 1  1  1  2  1 -1] ragadozás
% a növényevõ kihal [ 2  1  1  2  1 -1] ragadozás
% a 2 faj együtt van jelen [ 1  1  1  2  5  1] szimbiózis
% mindig az egyik nyer [ 3  1 -1  1  1 -1] versengés
% a kezdeti állapottól függõen vagy az egyik vagy a másik marad meg [ 3  1 -4  1 0.5 -1] versengés

%paraméterek:
a1=1; % x szaporodási rátája %[0 4] 
b1=1; % x erõforráskorlátja (természetes halálozása) %[0.1 10]
c1=1; % keresztcsatolás: az y hatása az x-re %[-10 10]
a2=3; % y szaporodási rátája %[0 4] 
b2=1; % y erõforráskorlátja (természetes halálozása) %[0.1 10]
c2=-1; % keresztcsatolás: az x hatása az y-ra %[-10 10]
%kezdeti feltételek:
x_null= 2;
y_null= 3;
%egy trajektória kirajzolása: ode45
t_null=0;
t_max=100;
egyenlet=@(t,xy)[xy(1)*(a1-b1*xy(1)+c1*xy(2));xy(2)*(a2-b2*xy(2)+c2*xy(1))];
[t, xy]=ode45(egyenlet, [t_null, t_max], [x_null, y_null]);

%vektormezõ ábrázolása:
x=0:0.1:4;
y=0:0.1:4;
[X,Y]=meshgrid(x,y);
dx=X.*(a1-b1*X+c1*Y);
dy=Y.*(a2-b2*Y+c2*X);
%normálás:
dx=dx./ sqrt(dx.^2+dy.^2);
dy=dy./sqrt(dx.^2+dy.^2);

% 0 gradiensû egyenesek (dx=0; dy=0) ábrázolása:
dx0_1=zeros(1, length(y));
dx0_2=(-a1+b1*x)/c1;
dy0_1=zeros(1, length(x));
dy0_2=(a2+c2*x)/b2;

%ábrázolás:
figure;
%vektormezõ és a trajektória:
subplot(1,2,1);
quiver(X,Y,dx,dy, 0.5, 'k');
hold on;
plot(xy(:,1), xy(:,2), 'g');
plot(dx0_1, y, 'r', x, dx0_2, 'r', x, dy0_1, 'b', x, dy0_2, 'b');
xlabel('x');
ylabel('y');
legend('vektormezõ', 'trajektória', 'dx=0, mert x=0', 'dx=0, mert a1-b1*x+c1*y=0', 'dy=0, mert y=0', 'dy=0, mert a2-b2*x+c2*y=0');
xlim([-0.1, 4.1]);
ylim([-0.1, 4.1]);
%a fajok mennyiségének alakulása az idõben: x-t, y-t ábrák:
subplot(1,2,2);
plot(t, xy(:,1), 'r', t, xy(:,2), 'b');
legend('x', 'y');





