Hvordan en Pendulum lærer dig differentierede ligninger
Du behøver ikke en matematikgrad for at forstå ODE-løsere. Du skal bruge et pendul, en skærm og 20 minutter. Her er hvordan Euler, RK4, og adaptive metoder faktisk virker - med den rigtige kode.
Start med hvad du kan se
Hæng en vægt fra en snor. Træk den til den ene side. Giv slip. Det svinger.
Du har lige skabt et system styret af en differentialligning:
dθ / dt = ω dω / dt = - (g / L) · sin (θ)
θ er vinklen. ω er vinkelhastigheden. g er tyngdekraften (9,81 m / s ²). L er strengens længde. Disse to linjer siger: vinklen ændres med en hastighed svarende til hastigheden, og hastigheden ændres med en hastighed, der afhænger af tyngdekraften, længden og den aktuelle vinkel.
Vi kan ikke løse ligningen præcist. sin(θ) gør det nonlineært. Der er ingen formel, der giver dig θ på noget tidspunkt t. Så vi tilnærmer - vi træder frem i små trin, udregne den næste tilstand fra den nuværende.
Det gør en ODE-løser. Og der er bedre og værre måder at gøre det på.
Den Euler metode: klar men fejlbehæftet
Den enkleste idé: hvis jeg kender staten nu, og jeg kender ændringshastigheden, kan jeg vurdere staten et lille skridt senere.
next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt
Det er Eulers metode. Det er som at gå gennem tåge: Man kan se et skridt foran, så man tager det skridt, så se igen. I kode:
function euler(f, t, y, dt) {
const dy = f(t, y);
return [
y[0] + dt * dy[0],
y[1] + dt * dy[1]
];
}
Problemet: Euler metode er førsteordens nøjagtige. Det betyder, at hvis man halverer trinstørrelsen, halverer man fejlen. For et pendul akkumuleres denne fejl - det simulerede pendul øger langsomt energi og gynger bredere og bredere. Efter et par minutter snurrer det rundt. Et rigtigt pendul gør aldrig det her.
RK4: Arbejdshesten
I 1901 offentliggjorde Carl Runge og Martin Kutta en bedre metode. I stedet for at se på ændringshastigheden en gang pr. trin, se på det fire gange:
- Mål hældningen ved starten af trin → k
- Trin halvvejs ved hjælp k Buddy, måle hældningen der → k
- Trin halvvejs ved hjælp af k against, måle igen → k against
- Trin til slut ved hjælp k #, måle en gang mere → k #
- Kombination: vægtet gennemsnit (k · 2k · + 2k + k ·) / 6
Det er præcis i fjerde orden. Halvere trin størrelse og fejlen falder med en faktor på 16. Pendulet serverer energi korrekt for tusindvis af gynger.
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])
];
}
Dette er den metode PinePaper bruger til pendul, springmasse, og Van der Pol simuleringer. Det er den samme metode, der anvendes i flyets bane beregninger. 22 linjer kode.
Hvorfor dette betyder uden for fysik
Pendulet er et pædagogisk eksempel. Men den samme teknik - skridt frem, mål, korrekt - gælder overalt, hvor du har en ændringshastighed:
- Befolkningstilvækst * *: dx / dt = r · x · (1 - x / K). Logistisk vækst med bæreevne. Samme løser.
- Kemiske reaktioner * *: koncentrationerne ændrer sig i forhold til de aktuelle koncentrationer. Samme løser.
- Neurale netværk * *: gradient nedstigning er en diskret ODE. Hvert træningstrin er et Euler trin langs tabsfladen.
- Økonomi * *: renteforbindelser kontinuerligt via dy / dt = r · y. Eksponentiel vækst er den enkleste ODE.
- Animation timing * *: lempelse kurver er løsninger til springdæmpning ODE. De "elastiske" og "bounce" easings i CSS er fysiske simuleringer.
Matematikken ændrer sig ikke. Domænet gør. Det er det, der gør det til et sprog - den samme grammatik beskriver fåretællinger, pendul gynger, og neurale netværk uddannelse.
Prøv selv
Åbn PinePaper og vælg Dynamic System generator. Vælg "pendul". Bob gynger. Nu ændre parametrene:
- Øge tyngdekraften → hurtigere sving (kortere periode)
- Øg stanglængde → langsommere sving (længere periode)
- Start på en større vinkel → se, hvordan perioden stiger (bratte effekt, at lærebog lille vinkel tilnærmelse savner)
Alle dine ændringer er en måling. Du ændrede en parameter og observerede resultatet. Den RK4 løser omberegnet 30 rammer i sekundet, og pendulet viste dig, hvad ligningen forudsiger.
Det er hele pointen. Matematik er måling. PinePaper gør det synligt.
{{kontrol: pendul - lab}}
Henvisninger
- Slagter, J.C. (2016). * Numeriske metoder til ordinære differentialligninger * (3. ed.). Wiley.
- Dormand, J.R. & Prince, P.J. (1980). En familie af indlejrede Runge- Kutta formler. * Journal of Computative og Anvendt Matematik *, 6 (1), 19-26.
- Euler, L. (1768). * Institutionum calculi integralis *, Vol. 1. Impensis Akademiae Imperialis Scientiarum.
- Hairer, E., Nørsett, S.P., & Wanner, G. (1993). * Løsning af ordinære differentialligninger I: Ikkestive problemer * (2. ed.). Springer.
- Kutta, W. (1901). Beitrag zur näherungsweisen Integration total 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 * (2nd ed.). Westview Press.
- PinePaper ODE løser dækker Euler, RK4, og adaptive Dormand- Prince RK45 i omkring 200 linjer. Prøv pendulsimulationen gratis på [pinepaper.studio / editor] (/editor). *
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor