· 5 min read

Miten Pendulum opettaa sinulle differentiaaliyhtälöt

Et tarvitse matematiikan tutkintoa ymmärtääksesi ODE:n ratkaisijoita. Tarvitset heilurin, näytön ja 20 minuuttia. Näin Euler, RK4, ja adaptiiviset menetelmät todella toimivat oikean koodin kanssa.

Aloita näkemästäsi

Painoa narusta. Vedä se toiselle puolelle. Päästä irti. Se keinuu.

Olet juuri luonut järjestelmän hallita DIFFERENTIAL EQUATION:

dθ/dt = ω dω/dt = -(g/L) · sin(θ)

θ on kulma. ω on kulmanopeus. g on painovoima (9,81 m/s2). L on merkkijonon pituus. Nämä kaksi riviä sanovat: kulma muuttuu yhtä nopeasti kuin nopeus, ja nopeus muuttuu nopeudella, joka riippuu painovoima, pituus, ja nykyinen kulma.

Ongelma on, ettemme voi ratkaista tätä yhtälöä. sin(θ) tekee siitä epälineaarisen. Ei ole kaavaa, joka antaisi sinulle θ milloin tahansa t. Joten olemme noin astumme eteenpäin pieninä lisäyksinä, laskemme seuraavan osavaltion nykyisestä.

Niin ODE:n ratkaisija tekee. On parempiakin tapoja.

Euler-menetelmä: Selvä mutta väärä

Yksinkertaisin ajatus: jos tunnen valtion nyt ja tiedän muutosnopeuden, voin arvioida valtion hieman myöhemmin.

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

Tämä on Eulerin menetelmä. Se on kuin kävelisi sumun läpi: voi nähdä askeleen edellä, joten ottaa sen askeleen, ja sitten katsoa uudelleen. Koodilla:

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

Ongelma: Eulerin menetelmä on ensimmäisen tilauksen tarkka. Se tarkoittaa, että jos puolittaa askelkoon, puolittaa virheen. Heilurissa tämä virhe kertyy .. simuloitu heiluri kasvattaa hitaasti energiaa ja keinuu leveämmin ja laajemmin. Muutaman minuutin kuluttua se pyörii täysissä piireissä. Oikea heiluri ei tee tätä.

RK4: Työhevonen

Vuonna 1901 Carl Runge ja Martin Kutta julkaisivat paremman menetelmän. Sen sijaan, että tarkastellaan muutosnopeutta kerran askeleelta, tarkastellaan sitä neljä kertaa:

  1. Mittaa askelman alussa oleva kaltevuus → k1
  2. Askel puolivälissä käyttäen k1, mittaa kaltevuus → k2
  3. Askel puolivälissä käyttäen k2, mittaa uudelleen → k3
  4. Askel loppuun käyttäen k3, mittaa vielä kerran → k4
  5. Yhdistelmä: painotettu keskiarvo (k1 + 2k2 + 2k3 + k4) / 6

Tämä on neljäs tilaus. Halve askelkoko ja virhe laskee kertoimella 16. Heiluri säästää energiaa oikein tuhansille keinuille.

Tämä väite kannattaa tarkistaa eikä uskoa. Alla molemmat menetelmät integroida y′ = y 0 - 1 jossa tarkka vastaus on e neljä vaihetta koot. Halving askel jakaa Eulerin virhe noin 2 ja RK4: n noin 16, mitä ensimmäinen ja neljäs tilaus tarkoittaa.

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])
  ];
}

Tätä menetelmää PinePaper käyttää heiluriin, jousimassaan ja Van der Pol -simulaatioihin. Samaa menetelmää käytetään lentoratalaskelmissa. 22 koodiriviä.

Miksi tämä on fysiikan ulkopuolella

Heiluri on opetusesimerkki. Mutta sama tekniikka askel eteenpäin, toimenpide, oikea sovelletaan missä tahansa, missä sinulla on muutosnopeus:

  • Väestökasvu: dx/dt = r·x·(1 - x/K). Logistinen kasvu kantokyvyn kanssa. Sama ratkaisija.
  • Kemialliset reaktiot: pitoisuudet muuttuvat suhteessa nykyisiin pitoisuuksiin. Sama ratkaisija.
  • Neural networks: liukuvärien laskeutuminen on diskretisoitu ODE. Jokainen harjoitusvaihe on Euler askel eteenpäin tappion pinnalla.
  • Taloudet: korkoyhdisteet jatkuvasti kautta dy/dt = r·y. Eksponentiaalinen kasvu on yksinkertaisin ODE.
  • Animaatioaika: Joustavampia työkoneita helpottavat käyrät. CSS:n "elastiset" ja "bounce" helpotukset ovat fyysisiä simulaatioita.

Matematiikka ei muutu. - Alueella on. Se tekee siitä kielen sama kielioppi kuvaa lammasten laskentaa, heilureita ja neuroverkkokoulutusta.

Kokeile itse

Avaa PinePaper ja valitse Dynamic System Generator. Valitse "pendulum." Bob lyö. Nyt muuttaa parametreja:

  • Lisää painovoimaa → nopeampi swing (lyhympi ajanjakso)
  • Lisää sauva pituus → hitaampi swing (pitempi jakso)
  • Aloita suuremmasta kulmasta → katsella, miten jakso kasvaa (epälineaarinen vaikutus, että oppikirja pienikulmainen lähentämisestä missaa)

Jokainen muutos on mitta. Muutitte muuttujaa ja huomasitte tuloksen. RK4 ratkaisi 30 kuvaa sekunnissa. Heiluri näytti, mitä yhtälö ennustaa.

Se on koko pointti. Matematiikka on mittausta. PinePaper tekee siitä näkyvän.

Interactive demo — open in editor pp:PinePaper

Lähteet

  • Teurastaja, J.C. (2016). * Tavallisten differentiaaliyhtälöiden numerologiset menetelmät* (3. ed.). Wiley.
  • Dormand, J.R. & Prince, P.J. (1980). Perhe sulautettu Runge-Kutta kaavoja. Journal of Computational and Applied Matematiikka, 6(1), 19-26.
  • Euler, L. (1768). Institutionum calculi integalis, Vol. 1. Impensis Academiae Imperialis Scientiarum.
  • Hairer, E., Nørsett, S.P., & Wanner, G. (1993). Tavallisten differentiaaliyhtälöiden poistaminen I: Ei-raskausongelmia (2. ed.). Springer.
  • Kutta, W. (1901). Beitrag zur näherungsweisen Integration totaler Differentialgleichungen. * Zeitschrift für Mathematik und Physik*, 46, 435-453.
  • Newton, minä. 1687). Philosophiæ Naturalis Principia Mathematica. Joseph Streater.
  • Runge, C. 1895). Über die numerische Auflösung von differentialgleichungen. * Mathematische Annalen*, 46(2), 167-178.
  • Strogatz, S.H. (2015). Nonlinear Dynamics and Chaos (2. ed.). Westview Press.

PinePaper:n ODE-ratkaisija kattaa Eulerin, RK4:n ja adaptiivisen Dormand-Prince RK45:n noin 200 rivissä. Kokeile heilurin simulaatiota ilmaiseksi osoitteessa mäntypaperistudio/editori.

Ready to create?

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

Open PinePaper Editor