function dxy=rugo_ode(t, xy_regi)

%t: az idõpont amiben a diffegyenlelet kiszámolom, az ode45 határozza meg, meredek változásnál kisebb idõközönként számolja ki az egyenletet
%xy_regi: a rendszer aktuális értéke, ez alapján számoljuk ki, hogy a következõ idõpillanatban hol lesz a rendszer 
%dxy: az adott idõ alatt bekövetkezõ változás, ez a függvény kimenete
%b: csillapítás, konstans paraméter, nem változik a futás során

x_regi=xy_regi(1);
y_regi=xy_regi(2);
dxy=zeros(2,1);

%egyenletek, hogy hogyan változik a rendszer:
dx=y_regi;
dy=-x_regi;

dxy(1)=dx;
dxy(2)=dy;

end

%a függvény meghívása:
%[t, xy]=ode45(@(t, xy) rugo_ode(t, xy, b), [tinit, Max_Time], [Xinit,Yinit]); %diffegyenletet kiszámol
%t: az idõpillanatok, amikre az egyenletet kiszámolta a rendszer
%xy: a rendszer értékei az adott idõpillanatokban
%[tinit, Max_Time]: ezen az idõintervallumon oldjuk meg a diffegyenletet 
%[Xinit,Yinit]: kezdeti értékek
%@(t, xy): ezek a ode45 futása során változó értékek: 
%minden lépésben a új idõ: t és új értékek: xy érkeznek a rugo_ode bemenetére, 
%és ezekkel számolja ki a függvény a rendszer megváltozását, 
%amit visszaad az ode45-nek, és ez ezek alapján kiszámolja a rendszer
%aktuális állapotát és a következõ idõlépést,
%az 1. xy_regi a [Xinit,Yinit] a rugo_ode esetén

%nem muszály a rendszernek külön ode függvényt írni az egyenletet megadhatjuk így is
%[t, xy]=ode45(@(t, xy) [xy(2); -b*xy(2)-xy(1)], [tinit, Max_Time], [Xinit; Yinit]);
%az ode45 ekkor tudja, hogy a fent leírt módon iterálja a t és az xy változókat