%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         5.gyakorlat         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Nemlin. din. rsz-ek alapjai %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%         2015.10.07.         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  Trace-Determináns diagram  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% biz pontokból trajekt rajzol,
%a mátrixot változtatom, hogy változik a fázisportré (sé, det, trace jelölve)
x = -4:1:4;
y = -4:1:4;
[X Y] = meshgrid(x,y);

K = 500;
fix = zeros(K,length(x)*length(y)); %pontok, ahol az ode45 kiszámolja
fiy = zeros(K,length(x)*length(y));

figure;
%trace, det görbe kirajzol
subplot(1,2,2);
tr=(-8:0.1:8);
plot(tr, tr.^2./4, 'b', tr, zeros(size(tr)), 'b', zeros(size(tr)), tr, 'b');
xlabel('trace');
ylabel('det');
hold on;
%
% paraméter változtat
hatar=3;
for a = -hatar:0.2:hatar
    % vizsgált rendszer:
    % ddx-2a*dx+(4-a^2)*x=0
    % ddx=(a^2-4)*x+2a*dx
    % dx=y;
    % dy=(a^2-4)x+2ay;
    % Jacobi mátrix:
    A = [0 1; -4+a^2 2*a] % egyenletrendszer mátrixos alakban
   
se=eig(A); %sajátértékek
%adott rendszerre difegyet megoldom:
 n=1;
for i = 1:length(x)
    for j = 1:length(y)
        %{
        if trace(A)>0 %ha taszítás van, a megoldások elmennek a kezdeti pontoktól messzire, nehezen lehet látni a folyamatokat, ezért:           
           A1=-A; %idõ megfordítás (egyenlet vagy mátrix -1-szerese): trajektória végpontjai a kijelölt pontok
        else
            A1=A;
        end
        %}
        [t,fi] = ode45(@(t,y) A*y, linspace(0,5,K), [x(i) y(j)]); %ode45 adott pontokban számol
        fix(:,n) = fi(:,1); %eltárolom az eredményeket fix, fiy adott sorában
        fiy(:,n) = fi(:,2);
        n = n+1;
    end
end

%plotol trajektóriákat adott pontokból:
subplot(1,2,1);
plot(fix,fiy);
hold on;
plot(X,Y,'x');
xlim([2*min(x) 2*max(x)]);
ylim([2*min(y) 2*max(y)]);
title(['sajátértékek: ', num2str(se(1)), ', ', num2str(se(2))]);
xlabel('x');
ylabel('y');
hold off

%trace det kirajzol:
subplot(1,2,2);
plot(trace(A), det(A), 'r*');
title(['trace(A): ', num2str(trace(A)), ', det(A):', num2str(det(A))]);

waitforbuttonpress;
%pause(0.1)

end