# Kezdo parancsok minden script elejen

# Workspace kiuritese, valtozok torlese
clear

# Megnyitott abrak becsukasa
close all

# Euler
function eredmeny = EulerModszer(fgv, kezdetiErtek, idoracs)
  
  # Az idoracs(1) idoponthoz tartozo megoldas ertek a kezdeti ertek
  eredmeny = kezdetiErtek;

  # minden tovabbi idoracs ponthoz elvegezzuk az Euler lepest  
  for k = 1 : (length(idoracs) - 1)
    
    # Ekkora volt a lepeskoz a t_{k+1} es t_{k} idopillanatok kozott
    h = idoracs(k + 1) - idoracs(k);
    
    # Euler lepes: y_{k+1} = y_k + f(y_k, t_k) * h
    eredmeny(k + 1, :) = eredmeny(k, :) + fgv(eredmeny(k, :), idoracs(k)) * h;
  
  endfor
  
endfunction

# Egy nagyon egyszeru jarvanyterjedesi modell: SIR modell

gamma = 1 / 3.3; # rendszerbol kikerulesi sebesseg (felgyogyulas vagy halalozas - varhatoan 3.3 nap alatt)
beta = 1.4 * gamma; # fertozo talalkozasi rata (az 1.4 az un. R0 azaz a reprodukcios rata)
N = 9800000; # A populacio nagysaga

t = 0 : 200; # idointervallum

y0 = [N-1, 1, 0] #kezdeti ertek: N - 1 nem beteg, 1 beteg, 0 rendszeren kivuli

# SIR
# S - fogekony (susceptible)
# I - fertozott (infected)
# R - rendszerbol kivett (removed)
#
# y(1) ~ S => S' = - beta * I * S/N
# y(2) ~ I => I' = beta * I * S/N - gamma * I
# y(3) ~ R => R' = gamma * I
sir = @(y, t) [ ...
  -beta * y(2) * y(1) / N, ...
  beta * y(2) * y(1) / N - gamma * y(2), ...
  gamma * y(2) ...
]

eredmeny = lsode(sir, y0, t);

plot(t, eredmeny);
title("SIR modell")
legend("S", "I", "R")