%% Kinematika
%% Newtonov zakon
% Veliko problemov v mehaniki se da zreducirati na reševanje časovnega poteka različnih količin, ki jih obravnavamo kot funkcije časa. Relacije med njiimi so najvećkrat diferencialnega tipa. Zato se pogosto zgodi, da se mehanični problem na neki točki prevede v diferencialno enačbo. Kot primer lahko vzamemo gibanje točkastega telesa. Nanj naj deluje neka sil (ali več sil). Zanj se dinamika zreducira na
% F=ma,
% kar lahko prepišemo tudi kot sistem dveh diferencialnih enačb ( za naznanki x in v):
% \dot{v}=\frac{F}{m}\\
% \dot{x}=v
% Seveda je lahko sila odvisna tako od časa kot od lege (eventuelno tudi hitrosti). Če imamo namesto gibanja v eni dimenziji gibanje v dveh ali treh, se število neznank poveča iz dveh na 4 (2D) oziroma 6 (3D). Prav tako se število spremenljivk ustrezno poveča, če imamo namesto enega objekta več objektov. Poleg tega ima lahko objekt notranje prostostne stopnje (npr. orientacijo), ki tudi prispevajo k novim spremenljivkam.
% Vsem sistemom pa je skupno to, da se jih da zreducirati na diferencialno enačbo tipa
% \frac{dy}{dt}=f(t,y)
% kjer je y vektor vseh spremenljivk, ki v sistemu nastopajo (v našem primeru je y=[x, v]), f pa (vektorska) funkcija, ki nam določa odvod tega vektorja (v našem primeru f=[v, F/m]). Razen v primeru res preprostih sistemov, so tovrstne enačbe tipično prezahtevne, da bi se jih lotili analitično. Zato se pogosto zatečemo k numeričnim metodam.
%% Metoda Runge-Kutta
% Enačbe zgornjega tipa največkrat rešujemo z družino metod Runge-Kutta (obstajajo sicer alternativni pristopi - npr. metoda prediktor-korektor). V teorijo se ne bomo preveč spuščali. Naj samo povemo na tem mestu, da so koeficienti pri teh metodah določeni tako, da je rešitev točna do čim višjega člena v razvoju Taylorjeve vrste. Treba je še omeniti, da čeprav so metode Runge-Kutta celotna družina metod, se besedno zvezo večkrat uporablja za konkretnega predstavnika te družine, to je metoda Runge-Kutta 4.
%% Eulerjeva metoda
% Izmed vseh metod, je ta najlažja. In čeprav sodi v družino Runge-Kutta, striktno gledano ne potrebujemo enakih pristopov, da pridemo do nje. Pri tej metodi gre za to, da ko enkrat poznamo y(t), lahko izračunamo y(t+\Deltat) kot
% y(t+\Delta t)=y(t)+\Delta tf(t,y)
% in ni torej nič drugega kot direktna diskretizacija originalne enačbe. Čeprav je ta metoda preprosta, je pa tudi izredno nenatančna. Je pa po drugi strani res, da da neko rešitev, tudi če so enačbe še tako zapletene.
%% Metoda središčne točke
% Ta metoda je nekoliko bolj sofisticirana. Gre pa tako. Najprej izračunamo koeficient (funkcijo f) v točki, v kateri se trenutno nahajamo. Nato naredimo polovičen korak naprej s tem koeficientom a le zato, da tam izračunamo nov koeficient, s katerim pa naredimo poln korak.
% k_1=f(t,y)\\
% k_2=f\left(t+\frac{\Delta t}{2},y+\frac{\Delta t}{2}k_1\right)\\
% y(t+\Delta t)=y(t)+\Delta t k_2
%% Metoda Runge-Kutta 4
% Največkrat uporabljena metoda (pri fiksnem koraku \Delta t) je metoda Runge-Kutta 4 (lokalno je točna to potence četrtega reda). Zanjo potrebujemo štiri koeficiente; enega na začetku, dva na vmesni točki in enega v kočni točki. In sicer tako.
% k_1=f(t,y)\\
% k_2=\left(t+\frac{\Delta t}{2},y+\frac{\Delta t}{2}k_1\right)\\
% k_3=\left(t+\frac{\Delta t}{2},y+\frac{\Delta t}{2}k_2\right)\\
% k_4=\left(t+\Delta t,y+\Delta tk_3\right)\\
% y(t+\Delta t)=y(t)+\frac{1}{6}(k_1+2k_2+2k_3+k_4)\Delta t
%% Reševanje diferencialnih enačb v Matlabu
% V Matlabu je numerično reševanje diferencialnih enačb zelo preprosto. Privzete metode, ki jih Matlab uporablja so tudi iz družine Runge-Kutta, a vendar z nekoliko drugačnim pristopom. Matlab privzeto uporablja dve metodi iz te družine, ampak na način, da imata večino koeficientov skupnih (in jih torej ni treba računati za vsako metodo posebej). Obe metodi se razlikujeta natanko za en red. Metoda nižjega reda je uporabljena za razvoj funkcije, metoda višjega reda pa za preverjanje, ali je dobljena rašitev znotraj željene natančnosti. Na ta način lahko sproti določamo korak, ki je potreben za dosego željene natančnosti.
% Ena od teh funkcij je ode45, ki bazira na izbiri koeficientov po metodi Dormand-Prince. Oglejmo si primer uporabe na primeru izračuna nihajne enačbe:
% \ddot{x}+\omega^2x=0
% pri začetnih pogojih x(0)=1 in v(0)=0.

% začetni pogoji
y0=[1; 0];
% dejanski klic funkcije ode45:
% nihanje=funkcija f, [0,5]=časovni interval, y0= začetni pogoji
[t,y]=ode45(@nihanje,[0,5],y0);
plot(t,y(:,1));
xlabel('t[s]');
ylabel('x[m]');

%
%  Na koncu definirajmo funkcijo f - v Matlabu morajo biti funkcije definirane na koncu skripte.

function dydt=nihanje(~,y) % t je obvezen parameter, čeprav ga ne potrebujemo, zato ~
% tukaj določimo krožno frekvenco
omega=2;
% y(2) je hitrost - v
dxdt=y(2);
% y(1) je lega - x
dvdt=-omega*omega*y(1);
%dušeno nihanje
%dvdt=-omega*omega*y(1)-0.5*y(2);
dydt=[dxdt; dvdt];
end
