Aiheeseen littyen varsin olennainen tehtäväluokka on ns. alkuarvotehtävä, joka on muotoa
y'(t) = f(t,y(t))
y(t0) = y0.
Esimerkiksi ideaaliseen, vaimentamattomaan jouseen kiinnitetyn kappaleen liikeradan ratkaisua varten voidaan muodostaa alkuarvotehtävä
x'(t) = v(t)
m*v'(t) = -k*x(t)
x(0) = x0
v(0) = v0,
jossa on kaksi tilamuuttujaa [x1(t), x2(t)] = [x(t), v(t)] eli paikka ja nopeus hetkellä t ja molemmat oletetaan tunnetuiksi hetkellä 0. Ratkaisu on peruskoulusta tuttu harmoninen värähtelyliike, mutta voisi vielä lyhyesti käydä läpi, miten ongelma voidaan ratkaistaan numeerisesti.
Käytännössä ensiksi kannattaa diskretoida aika N:ään osaan olettaen loppuajaksi tf, jolloin
t(k) = (k-1)/N*tf, k=1,...,N
Tällöin aika-askeleen pituus on dt=tf/N.
Samoin diskretoidaan tilamuuttujat:
x(k) = x(t(k))
v(k) = v(t(k))
Sitten voidaan muodostaa tilavektori
x = [x(1), v(1), x(2), v(2), ..., x(N-1), v(N-1), x(N), v(N)]'
Jos sitten valitaan käytettäväksi menetelmäksi vaikkapa kaikista helpoin finite difference -approksimaatio, niin derivaattoja voidaan approksimoida kaavoilla
x'(k) = (x(k+1)-x(k))/dt
v'(k) = (v(k+1)-v(k))/dt
Nyt ylempänä esitetyt tilayhtälöt voidaan esittää approksimatiivisesti muodossa
x(1) = x0
v(1) = v0
x(2)-x(1)-dt*v(1) = 0
v(2)-v(1)+(dt*k/m)*x(1) = 0
...
x(k+1)-x(k)-dt*v(k) = 0
v(k+1)-v(k)+(dt*k/m)*x(k) = 0
...
x(N)-x(N-1)-dt*v(N-1) = 0
v(N)-v(N-1)+(dt*k/m)*x(N-1) = 0
Nyt meillä on siis normaali lineaarinen yhtälöryhmä, joka voidaan esittää muodossa
A*x = b,
missä A on 2N x 2N -kokoinen matriisi
Koodi:
A =
1 0 0 0 0 0 ... 0 0 0 0
0 1 0 0 0 0 ... 0 0 0 0
-1 -dt 1 0 0 0 ... 0 0 0 0
q -1 0 1 0 0 ... 0 0 0 0
0 0 -1 -dt 1 0 ... 0 0 0 0
0 0 q -1 1 0 ... 0 0 0 0
... ... ... ... ... ... ... ... ... ... ...
0 0 0 0 0 0 ... -1 -dt 1 0
0 0 0 0 0 0 ... q -1 0 1
ja q = (dt*k/m).
Vektori b puolestaan on pituudeltaan 2N ja muodoltaan
b = [x0, v0, 0, 0, 0, ..., 0, 0, 0]'
Tilavektori x saadaan ratkaistua A:n käänteismatriisin ja b:n tulona:
x = A^(-1)*b.
Ja kappaleen paikka ajanhetkillä t0, t1, ..., tN saadaan siis ulostettua ottamalla parittomat alkiot x:stä ja nopeus puolestaan ottamalla parilliset alkiot x:stä.
Toivottavasti nyt ei hirveästi typoja tullut...
Periaatteessa ihan oikein mutta suosittelen käyttämään jotain muuta kuin Eulerin menetelmää integroimiseen. Katsokaa esim. RK4 näin aluksi.