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 toimivat oikealla koodilla.
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 likimääräisiä ... astumme eteenpäin pieninä lisäyksinä, laskemme seuraavan tilan 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. Heiluri, tämä virhe kertyy ... simuloitu heiluri hitaasti lisää 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:
- Mittaa askelman alussa oleva kaltevuus → k1
- Askel puolivälissä käyttäen k1, mittaa kaltevuus → k2
- Askel puolivälissä käyttäen k2, mittaa uudelleen → k3
- Askel loppuun käyttäen k3, mittaa vielä kerran → k4
- 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.
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
- 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 .
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.
{widget: pendulum-lab}
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 integralis*, 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, I. (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 riviä. Kokeile heilurin simulointia ilmaiseksi mäntypaperi.studio/editori.
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor