function diffusio_perem
%3. gyakorlat: diffúzió permfeltételekkel

%{
dt = 0.1; %idõbeli lépésköz
dx = 1; %térbeli lépésköz
D=4; %diffúzió sebessége %5 alatt stabil
nt = 1500; %idõtartomány vége, eddig futtatok %15000


x = 1:dx:200; %viszgált pontok egy egyenesen
nx = length(x); %vizsgált pontok száma
u = zeros(nx,1); % kezdeti értékek 0-ák
%U=zeros(nx, nt); %ha az idõbeli változásokat 1 ábrán akarjuk nézni

figure;
%u=0.1+sin(1/10*x); % más kezdeti érték 
u(170:180)=1; %csúcs indul, sûrûség függvény, eloszlásfüggvény deriváltja
%u(180:end)=1;% eloszlásfüggvény
%kezdet 0 vég 1 stabil átfolyás lesz

for t = 1:nt %minden idõpillanatban
    u2 = u; %u2=értékek az elõzõ idõplillanatban; u=új értékek
    for i = 1:dx:nx %minden pontban kiszámolom a hullám aktuális értéké   
       %minden pontra kiszámoljuk az új értékét:               
       if i==1 %peremek
             u(i)=0; %1. fix perem: alapból is ez volt, torzít a széleken, lefolyik az anyag, 0 lesz
            %  u(i) = u2(i) + D*dt/dx^2*(u2(i+1)-1*u2(i)); %2. gradiens 0 széleken=utolsó és utolsó elötti mindig ugyanazon az értéken van, kiegyenlítõdik az átlaghoz
            % u(i) = u2(i) + D*dt/dx^2*(u2(i+1)-2*u2(i)+u2(end)); % 3. periodikus határ: az elsõ és az utolsó pozíció összekapcsolva, kör lesz, kiegyenlítõdik az átlaghoz 
       elseif i>1 && i<nx
             u(i) = u2(i) + D*dt/dx^2*(u2(i+1)-2*u2(i)+u2(i-1)); %dU/dt=D*dU^2/dx^2 %diffúzió, szétfolyik
       else %peremek
            u(i)=0; %1. fix perem: alapból is ez volt, torzít a széleken felolyik az anyag
           % u(i) = u2(i) + D*dt/dx^2*(-1*u2(i)+u2(i-1)); %2. gradiens 0 széleken=utolsó és utolsó elötti mindig ugyanazon az értéken van, kiegyenlítõdik az átlaghoz
           % u(i) = u2(i) + D*dt/dx^2*(u2(1)-2*u2(i)+u2(i-1)); % 3. periodikus határ: az elsõ és az utolsó pozíció összekapcsolva, kör lesz, kiegyenlítõdik az átlaghoz
       end
    end
    
    %
    %if mod(t,10)==0 %hosszú futásnál minden 100.-at rajzol csak ki
    plot(x, u); %aktuális értékeket kirajzol
    grid(gca, 'minor'); % sûrû rácsot tesz a képre
    ylim([-0.5 1.5]); 
    %xlim([160, 190]) % 0. nincs határ kifolyik bal oldalt a vizsgált térbõl
    title(['lépés: ', num2str(t)]); %kiírítja az ábrára, hogy hányadik lépésnél vagyok
    
    %waitforbuttonpress; %gombnyomásra lép egyet a ciklus
     pause(0.01); %ilyen idõközönként rajzolja ki az új állapotot
    %end
    %
    %U(:, t)=u;
end

%halad a csúcs ha u(i+1)=u2(i) + D*dt/dx^2*(u2(i+1)-2*u2(i)+u2(i-1));
%mesh(U); %ha az idõbeli változásokat 1 ábrán akarjuk nézni
%}

%
%a sajátértékek vizsgálata:
a=0.4;%0.5;%0.4;%0.8;%0.45;%0.25;%0.8;%0.45;%0.5;%0.52;
b=1-2*a;
meret=20;

mx=diag(b*ones(meret,1),0)+diag(a*ones(meret-1,1),1)+diag(a*ones(meret-1,1),-1); %diffúziós egyenlet mátrix elõállítás
%mx(1, end)=a; %periodikus határ
%mx(end,1)=a; %periodikus határ
%mx(1,1)=1-a; %Neumann határ
%mx(end,end)=1-a; %Neumann határ
mx
sajatertekek=eig(mx)

% legnagyobb sé-hez csupa 1-es sv tartozik, ez lesz domináns
% hatványozással~ idõ múlással, ezért van kiegyenlítõdés a folyamat elõre haladtával
% a kis sé-hez tartozó sv gyakran vált elõjelet, oszcillál, de ez hamar
% eltûnik, lecseng a hatványozásnál
%a<0.5, akkor max sé 1 (anyagmegmaradásos esetben), minimális -1-nél nagyobb, a max dominál hatványozásnál a többi eltûnik hatványozással, Perron-Frobenius mx
%(ha a=0.5, akkor +- -ban 1 erõs hullám szõrösödik ez 2 tag marad meg legtovább hatványozással, szimmetria 
%a>0.5, akkor max sé 1 (anyagmegmaradásos esetben), minimális -1-nél kisebb, ez száll el hatványozással, oszcillálva, ez a domináns
%}



