· 6 min read

Hogyan egy inga megtanítja a differenciálegyenletek

Nem kell matekdiploma ahhoz, hogy megértsd az ODE megoldásait. Kell egy inga, egy képernyő és 20 perc. Így működik az Euler, az RK4 és az adaptív módszerek - az igazi kóddal.

Kezdd azzal, amit látsz

Egy madzagot. Húzd az egyik oldalra. Engedd el. Hintázik.

Épp most hozott létre egy rendszert, amit differenciál egyenlet vezérel:

unit description in lists d№ / dt = - (g / l) · sin (θ)

ez a szög. - a szögsebesség. g a gravitáció (9,81 m / s ²). L a húr hossza. Ez a két sor azt mondja: a szög a sebességnek megfelelő sebességgel változik, a sebesség pedig a gravitációtól, a hossztól és az aktuális szögtől függően.

A probléma: nem tudjuk pontosan megoldani ezt az egyenletet. A sin(θ) nem lineáris. Nincs olyan formula, ami bármikor bevállalná. Szóval közelebbről.. kis lépésekben haladunk előre, a következő államot a jelenlegitől számolva.

Ezt csinálja egy ODE megoldás. És vannak jobb és rosszabb módszerek is.

Az Euler módszer: Nyilvánvaló, de hibás

A legegyszerűbb ötlet: ha most ismerem az államot, és ismerem a változás ütemét, egy kis idővel később megbecsülhetem az államot.

next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt

Ez Euler módszere. Olyan ez, mint a ködben sétálni: egy lépéssel előrébb látsz, így megteszed azt a lépést, aztán újra megnézed. Kód:

function euler(f, t, y, dt) {
  const dy = f(t, y);
  return [
    y[0] + dt * dy[0],
    y[1] + dt * dy[1]
  ];
}

A probléma: Euler módszere első-sorrend pontos. Ez azt jelenti, ha felezed a lépés méretét, felezed a hibát. Egy inga, ez a hiba halmozódik - a szimulált inga lassan energiát szerez, és egyre szélesebbre és szélesebbé válik. Pár perc múlva már teljes körökben forog. Egy igazi inga sosem csinál ilyet.

RK4: A munkaló

1901-ben Carl Runge és Martin Kutta egy jobb módszert adott ki. Ahelyett, hogy lépésenként egyszer megnéznénk a változás sebességét, négyszer nézzük meg:

  1. Mérjük meg a lejtő elején a lépés → k
  2. Félúton halad a k 'm, mérje meg a lejtő → k' m
  3. Lépés félúton, újra intézkedés →
  4. Lépés a végsőkig, mérjük még egyszer → k
  5. Kombináció: súlyozott átlag (k) (k) + 2k) / 6

Ez a negyedik parancs. Fele a lépés mérete és a hiba csökken egy tényező 16. Az inga több ezer hintához megfelelő energiát biztosít.

Ezt az állítást érdemes ellenőrizni, nem hinni. Az alábbiakban mindkét módszer integrálja a y′ = y-t 0 és 1 között - ahol a pontos válasz * e * - 4 lépésben méretek. Ha felezzük a lépést, kettéosztjuk Euler hibáját 2-vel és RK4-gyel, ez az első és negyedik parancs.

Interactive demo — open in editor pp:PinePaper

function rk4(f, t, y, dt) {
  const k1 = f(t, y);
  const k2 = f(t + dt/2, [y[0] + dt/2 * k1[0], y[1] + dt/2 * k1[1]]);
  const k3 = f(t + dt/2, [y[0] + dt/2 * k2[0], y[1] + dt/2 * k2[1]]);
  const k4 = f(t + dt,   [y[0] + dt   * k3[0], y[1] + dt   * k3[1]]);
  return [
    y[0] + (dt/6) * (k1[0] + 2*k2[0] + 2*k3[0] + k4[0]),
    y[1] + (dt/6) * (k1[1] + 2*k2[1] + 2*k3[1] + k4[1])
  ];
}

Ez a PinePaper módszer az inga, a spring- tömeg és a Van der Pol szimulációkhoz. Ugyanaz a módszer, mint az űrröppálya számításoknál. 22 sor kód.

Miért számít ez kívül fizika

Az inga tanítási példa. De ugyanaz a technika.. lépjen előre, mérje meg, helyes - bárhol alkalmazható, ahol a változás mértéke:

      • Népességnövekedés * *: dx / dt = r · x · (1 - x / K). Logisztikai növekedés teherbírással. Ugyanaz a megoldás.
      • Kémiai reakciók * *: a koncentrációk a jelenlegi koncentrációkkal arányosan változnak. Ugyanaz a megoldás.
      • Neurális hálózatok * *: gradiens leereszkedés egy diszkrét ODE. Minden képzési lépés egy Euler lépés a veszteség felületén.
      • Economics * *: kamatok folyamatosan keresztül dy / dt = r · y. Az exponenciális növekedés a legegyszerűbb ODE.
      • Animációs időzítés * *: a lazító görbék a spring- csillapító OSE-k megoldásai. A CSS-ben található "rugalmas" és "ugráló" eszközök fizikai szimulációk.

A matek nem változik. A domain igen. Ez teszi nyelvévé ugyanaz a nyelvtan írja le a juhok számolását, inga ingadozásokat, és neurális hálózati képzés.

Próbáld meg magad

Nyissa meg a PinePaper-et és válassza ki a Dinamikus Rendszer generátort. Válassza ki az "ingát". A Bob hinták. Most változtasd meg a paramétereket:

  • Növelje a gravitációt → gyorsabb lendítés (rövidebb időszak)
  • Növelje rúd hossza → lassabb swing (hosszabb ideig)
  • Kezdés egy nagyobb szög → nézni, hogy az időszak növekszik (nem lineáris hatás, hogy a tankönyv kis szög közelítés hiányzik)

Minden változtatásod csak egy mérés. Megváltoztattál egy paramétert, és megfigyelted az eredményt. Az RK4 oldó másodpercenként 30 képkockát számított ki, és az inga megmutatta, mit jósol az egyenlet.

Ez a lényeg. A matematika a mérés. PinePaper teszi láthatóvá.

Interactive demo — open in editor pp:PinePaper

Hivatkozások

  • Hentes, J.C. (2016). * Numerical Methods for Normal Differential Equations * (3rd ed.). Wiley.
  • Dormand, J.R. & Prince, P.J. (1980). Egy beágyazott Runge- Kutta képletek családja. * Journal of Computational and Applied Mathematics *, 6 (1), 19- 26.
  • Euler, L. (1768). * Institutionum calculi integral *, Vol. 1. Impensis Academiae Imperialis Scientiarum.
  • Hairer, E., Nørsett, S.P., & Wanner, G. (1993). * Solving Normal Differential Equations I: Nonstrong Problems * (2nd ed.). Springer.
  • Kutta, W. (1901). Beitrag zur näherungsweisen Integration totaler Differentialgleichungen. * Zeitschrift für Mathematik und Physik *, 46, 435- 453.
  • Newton, én... (1687). * Philosophiae Naturalis Mediteria Mathematica *. London: Joseph Streater.
  • Runge, C. (1895). Über die numerische Auflösung von Differentialgleichungen. * Mathematische Annalen *, 46 (2), 167-178.
  • Strogatz, S.H. (2015). * Nem lineáris Dynamics and Chaos * (2nd ed.). Westview Press.

PinePaper ODE megoldás fedi Euler, RK4, és adaptív Dormand- Prince RK45 mintegy 200 sorban. Próbálja az inga szimulációt ingyen a [pinepaper.studio / editor] (/editor) oldalon.

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor