%7. gyakorlat:
% Fisher egyenlet:
dt = 0.1; %idõbeli lépésköz %D*2*dt/dx^2<1 %0.47-nél "szép" szõrösödés, nagy ,kis freki ugyanúgy cseng le
dx = 1; %térbeli lépésköz

x = 0:dx:500; %viszgált pontok az egyenesen
nx = length(x);
nt = 1500; %idõtartomány vége

c =1; %hulámterjedés sebessége
D=1; %diffúzió sebessége max 4 lehet

u = zeros(nx,1);
%kezdeti értékek: nem lehet negatív
u(1) =1; %0.1;%5;% az 1. pontban 1 (a többiben 0) a hullám kezdetben
%u(1:50) =1;%0.1;%5;%1; % (pozitív) kezdettõl függetlenül 1-re áll be a hullám
%u(250:end)=1;% visszafele megy
%u(250:260)=1;%5;%0.1;%1; %csúcs indul 
%u([250:260, 200:230])=1; %0.1;%5;% 2 csúcs indul 
%u(250:300)=rand(1,51)*2; %random kezdet (nem lehet negatív)
%u(250:300)=linspace(0,2,51); %a kezdeti hulámfronttól se függ
%u(1:100)=linspace(2,0,100); %a kezdeti hulámfronttól se függ
%u(1:100)=linspace(0.5,0,100); %a kezdeti hulámfronttól se függ
%u(1:150)=exp(-0.1*(1:150)); %a kezdeti hullámfronttól se függ, ha az az elején 1 a végén pedig 0 van (ha nem 0 a vége, akkor más hullámfront is lehet)

figure;
%kezdeti érték rajzol:
plot(u);
grid(gca, 'minor');
ylim([-1.2 5]);
xlim([-1 450]);
waitforbuttonpress;

for t = 1:nt %minden idõpillanatban
    u2 = u; %u2=értékek az elõzõ idõplillanatban; u=új értékek
    for i = 2:nx-1 %minden pontban kiszámolom a hullám aktuális értékét (a széleket külön kell kezelni)
        u(i) = u2(i) +c*dt*u2(i)*(1-u2(i))+D*dt/dx^2*(u2(i+1)-2*u2(i)+u2(i-1)); %dU/dt=c*U*(1-U)+D*dU^2/dx^2 %reakc tag+diff tag=fisher, térben szétterjed (diff),
    end

 %ábrázol:
    plot(u);
    grid(gca, 'minor');
    ylim([-1.2 5]);
    xlim([-1 450]);
    %waitforbuttonpress;
     pause(0.01);
     
end