# Kezdo parancsok minden script elejen

# Workspace kiuritese, valtozok torlese
clear

# Megnyitott abrak becsukasa
close all

display("Lehules modellezese, kulso homerseklet 17 fok, lehulesi egyutthato 1.2")
f = @(y, t) - 1.2 * (y - 17)

display("Euler modszer - lasd .m file")

# Felkeszulve tobbdimenzios egyenletekre, a kovetkezo felteveseink vannak:
# fgv: R^n -> R^n az egyenlet jobb oldala
# kezdetiErtek: R^n-beli vektor, a rendszer kezdeti allapota
# idoracs: R^m-beli vektor, m db idopont melyeken a megoldast szeretnenk kozeliteni
#
# az elso idopont es a kezdeti ertek osszetartozik
#
# kimenet: eredmeny = R^(m x n) -es matrix, melynek k-ik sora, azaz eredmeny(k,:) az idoracs(k) idoponthoz tartozo becsles
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

display("Egzakt megoldas:")
g = @(y0, t) (y0 - 17) * exp(-1.2 * t) + 17

# idoracs
t = linspace(0, 10, 1000);

plot(t, g(35, t))

# hold on - megtartja aktivba a grafikont es lehet ra mast rajzolni, akar mas idoskalan is
hold on

t = 0 : 1 : 10;
plot(t, EulerModszer(f, 35, t))

t = 0 : 0.25 : 10;
plot(t, EulerModszer(f, 35, t))
legend("Egzakt 1000 pontban", "Euler 1-es lepeskozzel", "Euler 0.25-os lepeskozzel")

