Hvordan en pendulum lærer deg forskjellig likheter
Du trenger ikke matematikk for å forstå ODE løsere. Du trenger pendel, skjerm og 20 minutter. Her er hvordan Euler, RK4, og adaptive metoder faktisk fungerer - med den virkelige koden.
Start med det du kan se
Legg vekt på en streng. Dra den til den ene siden. La oss gå. Den svinger.
Du opprettet nettopp et system styrt av en differensialligning:
dθ/dt = ω dō/dt = -(g/L) · sin(θ)
θ er vinkelen. Ø er vinkelhastigheten. g er tyngdekraften (9,81 m/s2). L er strengens lengde. Disse to linjene sier: vinkelen endres med en hastighet som er lik hastigheten, og hastigheten endres med en hastighet som avhenger av tyngdekraft, lengde og gjeldende vinkel.
Problemet: Vi kan ikke løse denne ligningen nøyaktig. sin(θ) gjør det ikke-lineær. Det er ingen formel som gir deg θ når som helst t. Så vi omtrentlig - vi går videre i små trinn, databehandling neste tilstand fra den nåværende.
Det er det en ODE løser gjør. Og det er bedre og verre måter å gjøre det på.
Euler-metoden: Uunnværlig, men flekket
Den enkleste ideen: Hvis jeg kjenner staten nå, og jeg vet endringskursen, kan jeg estimere staten et lite tidssteg senere.
next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt
Dette er Eulers metode. Det er som å gå gjennom tåke: du kan se ett skritt fremover, så du tar det trinnet, så se igjen. 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: Eulers metode er nøyaktig. Det betyr at hvis du halver trinnstørrelsen, halver du feilen. For en pendel akkumulerer denne feilen - den simulerte pendel sakte får energi og svinger bredere og bredere. Etter noen minutter spinner det i fulle sirkler. En ekte pendel gjør det aldri.
RK4: Workhorse
I 1901 publiserte Carl Runge og Martin Kutta en bedre metode. I stedet for å se på endringshastigheten en gang per steg, se på det fire ganger:
- Mål skråningen i begynnelsen av trinnet → k1
- Trinn halvveis med k1, mål skråningen der → k2
- Trinn halvveis med k2, mål igjen → k3
- Trinn til slutten ved bruk av k3, måle en gang til → k4
- Kombiner: vektet gjennomsnitt (k1 + 2k2 + 2k3 + k4) / 6
Dette er fjerde orden nøyaktig. Hold trinnstørrelsen og feilen faller med en faktor på 16. Pendelen sparer energien riktig for tusenvis av svinger.
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 metoden PinePaper bruker for pendel, vårmasse og Van der Pol simuleringer. Det er den samme metoden som brukes i aerospace baneberegninger. 22 linjer kode.
Hvorfor dette betyr utenfor fysikken
Pendel er et eksempel på undervisning. Men den samme teknikken - skritt fremover, måle, riktig - gjelder uansett hvor du har en endringsrate:
- Populationsvekst: dx/dt = r·x·(1 - x/K). Logistisk vekst med bærekapasitet. Samme løser.
- Kemiske reaksjoner*: Konsentrasjonene endres i forhold til dagens konsentrasjoner. Samme løser.
- Nærlige nettverk: gradientnedstigning er en diskret ODE. Hvert treningstrinn er et Euler-trinn langs tapsoverflaten.
- Ekonomikk: interesseforbindelser kontinuerlig via dy/dt = r·y. Eksponentiell vekst er den enkleste ODE.
- Animativ timing*: Easing kurver er løsninger på vår-damper ODEs. De "elastiske" og "bounce" easings i CSS er fysiske simuleringer.
Matematikken forandrer seg ikke. Domeneet gjør det. Det er det som gjør det til et språk - den samme grammatikken beskriver sauetelling, pendelsvingninger og nevrale nettverkstrening.
Prøv det selv
Åpne PinePaper og velg dynamisk systemgenerator. Velg "pendulum." Bob svinger. Nå endre parametrene:
- Øk tyngdekraften → raskere sving (kortere periode)
- Øk stanglengden → langsommere sving (lengere periode)
- Start med en større vinkel → se hvordan perioden øker (ikke-lineær effekt som læreboken småvinkel tilnærming mangler)
Alle endringer du gjør er en måling. Du endret en parameter og observerte resultatet. RK4-løseren rekomponerte 30 rammer i sekundet, og pendel viste deg hva ligningen forutsi.
Det er hele poenget. Matematikk er måling. PinePaper gjør det synlig.
Referanser
- Butcher, J.C. (2016). Numeriske metoder for ordinære differensielle likheter (3. ed.). Wiley.
- Dormand, J.R. & Prince, P.J. (1980). En familie med innebygde Runge-Kutta-formler. Journal av Computational og Applied Matematikk, 6.1, 19-26.
- Euler, L. (1768). Institusjonum kalkyleri integralis, Vol. 1. Impensis Academiae Imperialis Scientiarum.
- Hairer, E., Nørsett, S.P., & Wanner, G. (1993). * Solving ordinære differensielle likheter I: Nonstiff Problemer* (2nd ed.). Springer.
- Kutta, W. (1901). Beitrag zur näherungsweisen Integrasjon totaler Differentialgleichungen. Zeitschrift für Mathematik und Fysik, 46, 435-453.
- Newton, I. (1687). Filosophiæ Naturalis Principia Mathematica. Oslo: Joseph Strateater.
- Runge, C. (1895). Über die numerische Auflösung von differentialgleichungen. Mathematische Annalen, 46(2), 167-178.
- Strogatz, S.H. (2015). Nonlinear Dynamics og Chaos (2nd ed.). Westview Press.
PinePaper ODE løser dekker Euler, RK4, og adaptive Dormand-Prince RK45 i omtrent 200 linjer. Prøv pendelsimuleringen gratis på pinepaper.studio/editor.
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor