Metoda Verleta i Żaby, równania różniczkowe

0

Metoda Verleta, powiedzmy dla grawitacji, jest taka:

v += a*h/2; // liczymy prędkość w połowie drogi
r += v*h; a = force(r); // nowe położenie i przyspieszenie w nim: a(r) = -GM/r^2, z Newtona;
v += a*h/2; // tu mamy prędkość w punkcie r

I jest też metoda żaby - Leapfrog:
http://en.wikipedia.org/wiki/Leapfrog_integration

razem taki jest wynik:
**x1 = x0 + v0 t + a0 t2/2
v1 = v0 + (a0 + a1) t/2 **

Ta pierwsza - Velocity Verlet, tak w połowie:
http://en.wikipedia.org/wiki/Verlet_integration

a tu jest taki wynik:
x(t+dt) = x(t) + v(t) t + a(t) t2/2
v(t+dt) = v(t) + [a(t) + a(t+dt)] t/2

Przecież jest identyko dla obu metod!

O co tu chodzi?

I to nie koniec!

Metoda typu:

r += v*h/2; // liczymy punkt w połowie drogi
v += a(r)*h; // a = force(r) - z połowy drogi
r += v*h/2; // tu mamy nowe położenie 

Tu tylko raz liczymy force - średnie, bo w połowie drogi, jak w tamtych metodach,
tyle że tam liczymy średnią tak: (a0+a1)/2, czyli gorzej, bo dwa razy trzeba obliczać siły.

I co to jest za metoda?
Ja zawsze myślałem że to jest właśnie żaba, a tamte to jeden - Vielocity Verlet.

0
qua napisał(a):

a tu jest taki wynik:
x(t+dt) = x(t) + v(t) t + a(t) t2/2
v(t+dt) = v(t) + [a(t) + a(t+dt)] t/2

Przecież jest identyko dla obu metod!

Podałeś wzór na ruch jednostajnie przyspieszony i się dziwisz, że wzór jest taki sam? Jest taki sam, bo jest to jedynie słuszny wzór, przynajmniej jeśli o mechanice Newtona jest mowa…

0
Azarien napisał(a):

Podałeś wzór na ruch jednostajnie przyspieszony i się dziwisz, że wzór jest taki sam? Jest taki sam, bo jest to jedynie słuszny wzór, przynajmniej jeśli o mechanice Newtona jest mowa…

Azarien napisał(a):

Podałeś wzór na ruch jednostajnie przyspieszony i się dziwisz, że wzór jest taki sam? Jest taki sam, bo jest to jedynie słuszny wzór, przynajmniej jeśli o mechanice Newtona jest mowa…

Akurat tak jest w większości aproksymacji, bo to jest zwyczajny szereg potęgowy:

y(t+h) = y(t) + y'(t)h + y''(t) h2/2 + o (h3)

trzeciej pochodnej i wyższych nie używa się w tradycyjnych metodach, znaczy tych Runge-Kutty i pokrewnych.

Dla grawitacji obliczamy tylko a = a(r) = k/|r|3 . r;

Ciekawe jaka by tu była trzecia pochodna, czyli zryw:

f = da/dt = d k/|r|3 . r / dt = -3k/|r|4 d|r|/dt . r + k/|r|3 dr/dt

dr/dt = v, co mamy już dane, ale jeszcze jest d|r|/dt, co trzeba wyliczy.
|r| = sqrt(x2+y2+z2), czyli pochodna: (xx' + yy' + zz')/|r|
a to u góry to skalarny: r.v, czyli ostatecznie: d|r|/dt = r.v / |r| = v.r0

Poskładamy i zobaczymy co to będzie:
f = -3k/|r|4 v.r0 . r + k/|r|3 v = |a|/|r| * [-3 (v.r0) r0 + v] = |a|/|r| [v - 3 v_r];
chyba takie coś.

Można dość ławo to obliczać - wystarczy można opracować metodę, która używa f i byłaby ona rzędu minimum 3,
ze stosunkowo niewielką liczbą obliczeń, czyli byłaby szybka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1